如何在asp.net中使用Windows身份验证获取用户名?

use*_*679 25 c# asp.net authorization windows-authentication windows-security

我想使用Windows身份验证获取用户名

实际上我实现了"以不同用户身份登录",单击此按钮时,Windows安全性将出现在那里我们可以提供凭据.

在那个时候,如果我提供一些其他凭证,它只采用当前用户名.如何从Windows安全性获取给定的凭据用户名?

IIS中的主机应用程序然后禁用匿名身份验证并启用了Windows身份验证.

web.config中:

<system.web>
    <compilation debug="true" targetFramework="4.0" />
  <identity impersonate="true"/>
  <authorization>
      <allow users="*"/>
      <deny users="*"/>
  </authorization>
</system.web>
<system.webServer>
    <directoryBrowse enabled="true" />
    <security>
        <authentication>
            <anonymousAuthentication enabled="false" />
            <windowsAuthentication enabled="true" />
        </authentication>
    </security>
Run Code Online (Sandbox Code Playgroud)

的.cs

在这里,我总是得到默认的用户名

string fullName = Request.ServerVariables["LOGON_USER"];
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?提前致谢

sle*_*pox 29

您可以通过以下方式在Windows身份验证下获取用户的WindowsIdentity对象:

WindowsIdentity identity = HttpContext.Current.Request.LogonUserIdentity;
Run Code Online (Sandbox Code Playgroud)

然后你可以获得有关用户身份信息的信息.

请注意,您需要为这些代码提供HttpContext.

  • 您的意思是在Windows Auth对话框中输入了错误的密码?它不应该允许您通过身份验证. (2认同)

Xan*_*vis 21

这些是您可以访问的不同变量及其值,具体取决于IIS配置.

方案1: IIS中的匿名身份验证,模拟关闭.

HttpContext.Current.Request.LogonUserIdentity.Name    SERVER1\IUSR_SERVER1 
HttpContext.Current.Request.IsAuthenticated           False                    
HttpContext.Current.User.Identity.Name                –                        
System.Environment.UserName                           ASPNET                   
Security.Principal.WindowsIdentity.GetCurrent().Name  SERVER1\ASPNET
Run Code Online (Sandbox Code Playgroud)

方案2: IIS中的Windows身份验证,模拟关闭.

HttpContext.Current.Request.LogonUserIdentity.Name    MYDOMAIN\USER1   
HttpContext.Current.Request.IsAuthenticated           True             
HttpContext.Current.User.Identity.Name                MYDOMAIN\USER1   
System.Environment.UserName                           ASPNET           
Security.Principal.WindowsIdentity.GetCurrent().Name  SERVER1\ASPNET
Run Code Online (Sandbox Code Playgroud)

方案3: IIS中的匿名身份验证,模拟

HttpContext.Current.Request.LogonUserIdentity.Name    SERVER1\IUSR_SERVER1 
HttpContext.Current.Request.IsAuthenticated           False                    
HttpContext.Current.User.Identity.Name                –                        
System.Environment.UserName                           IUSR_SERVER1           
Security.Principal.WindowsIdentity.GetCurrent().Name  SERVER1\IUSR_SERVER1 
Run Code Online (Sandbox Code Playgroud)

方案4: IIS中的Windows身份验证,模拟

HttpContext.Current.Request.LogonUserIdentity.Name    MYDOMAIN\USER1
HttpContext.Current.Request.IsAuthenticated           True          
HttpContext.Current.User.Identity.Name                MYDOMAIN\USER1
System.Environment.UserName                           USER1         
Security.Principal.WindowsIdentity.GetCurrent().Name  MYDOMAIN\USER1
Run Code Online (Sandbox Code Playgroud)

图例
SERVER1\ASPNET:服务器上正在运行的进程的标识.
SERVER1\IUSR_SERVER1:IIS中定义的匿名访客用户.
MYDOMAIN\USER1:远程客户端的用户.

资源

  • 从@KaushikGhosh提供的链接中获得的总收益。/sf/answers/2202133881/ (3认同)

Dav*_*ard 6

这应该工作:

User.Identity.Name
Run Code Online (Sandbox Code Playgroud)

Identity 返回一个 IPrincipal

这是Microsoft 文档的链接。


小智 0

我认为由于以下代码,您没有获得新的凭据

string fullName = Request.ServerVariables["LOGON_USER"];
Run Code Online (Sandbox Code Playgroud)

您可以尝试自定义登录页面