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

7bsow1i6  于 2022-12-24  发布在  .NET
关注(0)|答案(8)|浏览(219)

我想使用Windows身份验证获取用户名
实际上,我实现了“登录为不同的用户”,当点击这个按钮Windows安全将出现在那里,我们可以给予凭据。
在这段时间里,如果我给予一些其他的凭据,它只取当前的用户名。如何从windows安全中获得给定的凭据用户名?
IIS中的主机应用程序,然后禁用匿名身份验证并启用Windows身份验证。

网站配置:

<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>

</system.webserver>

.cs

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

string fullName = Request.ServerVariables["LOGON_USER"];

有什么想法吗?

k75qkfdt

k75qkfdt1#

这些是您可以访问的不同变量及其值,具体取决于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

**方案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

**方案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

**方案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

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

sshcrbum

sshcrbum2#

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

WindowsIdentity identity = HttpContext.Current.Request.LogonUserIdentity;

然后你就可以得到用户的信息,比如identity.Name。
请注意,这些代码需要HttpContext。

t5fffqht

t5fffqht3#

这应该行得通:

User.Identity.Name

Identity返回一个
这里是指向Microsoft documentation的链接。

wlzqhblo

wlzqhblo4#

这取决于应用程序的配置以及IIS,正如这位先生在下面的链接中正确地解释的那样。
http://richhewlett.com/2011/02/15/getting-a-users-username-in-asp-net/

ippsafx7

ippsafx75#

您可以从WindowsIdentity读取Name

var user = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
return Ok(user);
mwkjh3gx

mwkjh3gx6#

我认为由于下面的代码,您不会获得新的凭据

string fullName = Request.ServerVariables["LOGON_USER"];

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

9w11ddsr

9w11ddsr7#

用户名如下所示:

var userName = HttpContext.Current.Request.LogonUserIdentity?.Name;
btqmn9zl

btqmn9zl8#

在您的视图页面/ _Layout.cshtml中声明以下代码:

@using System.DirectoryServices.AccountManagement

@{
    var context = new PrincipalContext(ContextType.Domain);
    var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
    var userName = @principal.GivenName + " " + @principal.Surname;
}

相关问题