Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在IIS7+;_C#_Asp.net_Iis 7 - Fatal编程技术网

C# 如何在IIS7+;

C# 如何在IIS7+;,c#,asp.net,iis-7,C#,Asp.net,Iis 7,我在远程IIS7+服务器上部署了一个asp.net 4.5 web forms web应用程序,我想获取用户的域\用户名以填充数据库列 My web.config具有以下功能: <system.web> <authentication mode="Windows" /> <identity impersonate="true" /> <!-- I have tried with and without impersonate-->

我在远程IIS7+服务器上部署了一个asp.net 4.5 web forms web应用程序,我想获取用户的域\用户名以填充数据库列

My web.config具有以下功能:

<system.web>
   <authentication mode="Windows" />
   <identity impersonate="true" /> <!-- I have tried with and without impersonate-->
   <authorization>
         <deny users="?"/>
   </authorization>
   ...other stuff
</system.web>
<system.webServer>
   <security>
     <authentication>
       <anonymousAuthentication enabled="false" />
       <windowsAuthentication enabled="true" />
     </authentication>
   </security>

   <modules>
      <remove name="FormsAuthentication" />
   </modules>
其他需要注意的事项:

已在服务器上为我的web应用启用Windows身份验证

我一直得到服务器名而不是用户名

此外,我的web应用程序没有登录。用户对服务器的访问受到限制,但如果他们可以访问服务器,则他们将自动访问我的web应用程序

[更新]

有趣的突破,如果我做内联

 <% Response.Write(HttpContext.Current.User.Identity.Name.ToString()); %>
见:

要获取asp.net aspx页面的当前用户名,请使用

System.Security.Principal.WindowsIdentity.GetCurrent().Name 
要获取实际登录的用户,请使用以下任一选项:

HttpContext.Current.User.Identity.Name
Page.User (wraps HttpContext.Current.User.Identity.Name)
Request.ServerVariables("logon_user")
您可能还需要:

impersonate=true
在web.config文件中

这篇文章也可以帮助你:

[编辑]这篇文章展示了IIS 7的封面下发生的事情:

这篇文章也希望能让你了解尝试和错误的结果意味着什么:

您的web.config中可能还需要以下内容

<authorization>
    <deny users = "?" /><!-- This denies access to the Anonymous user -->
    <allow users ="*" /><!-- This allows access to all users -->
</authorization>
在IIS的处理管道应用程序生命周期的早期,即在进行身份验证之前,您称之为“服务器端”。

 Response.Write( 
是应用程序生命周期的最后一个方面。请查看Microsoft的IIS7生命周期文档:

  • 验证请求
  • 执行URL映射
  • 引发BeginRequest事件
  • 引发AuthenticateRequest事件
  • 引发PostAuthenticateRequest事件
  • 引发AuthorizeRequest事件
  • 引发PostAuthorizerRequest事件。
  • 只有在这之后,才能真正安全地进行您需要的处理,请参见:

    要获取asp.net aspx页面的当前用户名,请使用

    System.Security.Principal.WindowsIdentity.GetCurrent().Name 
    
    要获取实际登录的用户,请使用以下任一选项:

    HttpContext.Current.User.Identity.Name
    Page.User (wraps HttpContext.Current.User.Identity.Name)
    Request.ServerVariables("logon_user")
    
    您可能还需要:

    impersonate=true
    
    在web.config文件中

    这篇文章也可以帮助你:

    [编辑]这篇文章展示了IIS 7的封面下发生的事情:

    这篇文章也希望能让你了解尝试和错误的结果意味着什么:

    您的web.config中可能还需要以下内容

    <authorization>
        <deny users = "?" /><!-- This denies access to the Anonymous user -->
        <allow users ="*" /><!-- This allows access to all users -->
    </authorization>
    
    在IIS的处理管道应用程序生命周期的早期,即在进行身份验证之前,您称之为“服务器端”。

     Response.Write( 
    
    是应用程序生命周期的最后一个方面。请查看Microsoft的IIS7生命周期文档:

  • 验证请求
  • 执行URL映射
  • 引发BeginRequest事件
  • 引发AuthenticateRequest事件
  • 引发PostAuthenticateRequest事件
  • 引发AuthorizeRequest事件
  • 引发PostAuthorizerRequest事件。

  • 只有在这之后,才能真正安全地进行所需的处理

    到目前为止,这些都没有起作用。它们都返回管理员用户名。我正在与box管理员进行双重检查,以确保服务器上的匿名访问被禁用,但我非常确定它是禁用的。还有其他想法吗?你有没有试着按照顶部链接中的解决方案:也就是说,我试过了,但没有用。另外,我真的不明白链接中的答案如何。。。windows标识。根据您所描述的,IIS仍然向用户提供匿名访问,而不是强制请求通过windows标识公告中列出的身份验证代码。在调查您的问题时,我的下一步将是将web.config剥离到其基本部分,然后看看会发生什么。如果还有问题的话,我会想看看菲德勒是否能透露更多的信息。然后可能会查看IIS的日志和/或附加调试器w3wp.exe以查看IIS正在执行的操作。只是想让您知道,我的问题是在我实际更新数据库的地方进行了4次方法调用。当我第一次尝试这样做时,我把Environment.UserName;在那里,每次我回去检查更新方法时都会错过它。。。然而,多亏了你的文章,我对页面生命周期有了很多了解,所以我非常感谢你的帮助。到目前为止,这些都没有起作用。它们都返回管理员用户名。我正在与box管理员进行双重检查,以确保服务器上的匿名访问被禁用,但我非常确定它是禁用的。还有其他想法吗?你有没有试着按照顶部链接中的解决方案:也就是说,我试过了,但没有用。另外,我真的不明白链接中的答案如何。。。windows标识。根据您所描述的,IIS仍然向用户提供匿名访问,而不是强制请求通过windows标识公告中列出的身份验证代码。在调查您的问题时,我的下一步将是将web.config剥离到其基本部分,然后看看会发生什么。如果还有问题的话,我会想看看菲德勒是否能透露更多的信息。然后可能会查看IIS的日志和/或附加调试器w3wp.exe以查看IIS正在执行的操作。只是想让您知道,我的问题是在我实际更新数据库的地方进行了4次方法调用。当我第一次尝试这样做时,我把Environment.UserName;在那里,每次我回去检查更新方法时都会错过它。。。不过,多亏了你的文章,我对页面生命周期有了很多了解,所以我非常感谢你的帮助。