该网站正在我的本地IIS 6.1上运行。我想添加一些功能来从我们的AD中提取信息。我的AD代码适用于许多其他项目和我的开发服务器。以下是我写出用户名的尝试:
Response.Write("1. " + this.Request.LogonUserIdentity.Name);
Response.Write("2. " + Request.ServerVariables["Auth_User"]);
Response.Write("3. " + WindowsIdentity.GetCurrent().Name.ToString());
我得到的结果是:
如何获取实际的Windows用户名,例如mydomain / username
由于
答案 0 :(得分:15)
这里有两个不同的Windows用户 - 第一个是您的应用程序用户,第二个是用户(或Windows帐户),您的ASP.NET应用程序(来自IIS透视图的应用程序池)正在其中运行。 WindowsIdentity.GetCurrent
通常会返回此引用。
要获取使用该应用程序的实际Windows用户,您必须强制执行身份验证。为此,您可以在IIS中为所述网站启用集成身份验证(Windows身份验证)。还要修改ASP.NET配置以使用Windows身份验证。现在,您可以使用HttpContext.Current.User.Identity
来获取实际用户。
答案 1 :(得分:3)
HttpContext.Current.User.Identity
可能对您有用。
同样System.Threading.Thread.CurrentPrincipal
可以提供帮助。
但情况可能是您实际上必须在用户登录时设置身份实例(尽管不一定要实现IPrincipal
和周围的机制,而是使用内置的WindowsIdentity
实现)
我不是100%的百分之百,Windows身份验证可能会自动设置,以便您只需检索。
另外,请查看描述基本用户操作的this link from MSDN
答案 2 :(得分:2)
此代码段显示LogonUserIdentity
的设置方式(使用反射器)
if ((this._wr is IIS7WorkerRequest) && (((this._context.NotificationContext.CurrentNotification == RequestNotification.AuthenticateRequest) && !this._context.NotificationContext.IsPostNotification) || (this._context.NotificationContext.CurrentNotification < RequestNotification.AuthenticateRequest)))
{
throw new InvalidOperationException(SR.GetString("Invalid_before_authentication"));
}
IntPtr userToken = this._wr.GetUserToken();
if (userToken != IntPtr.Zero)
{
string serverVariable = this._wr.GetServerVariable("LOGON_USER");
string str2 = this._wr.GetServerVariable("AUTH_TYPE");
bool isAuthenticated = !string.IsNullOrEmpty(serverVariable) || (!string.IsNullOrEmpty(str2) && !StringUtil.EqualsIgnoreCase(str2, "basic"));
this._logonUserIdentity = CreateWindowsIdentityWithAssert(userToken, (str2 == null) ? "" : str2, WindowsAccountType.Normal, isAuthenticated);
}
正如您所看到的,IIS 7已经更改了。
我相信你正在使用 Windows身份验证+模拟,所以我会选择最后一个(WindowsIdentity.GetCurrent()
),我确信这是运行的身份请求。
答案 3 :(得分:0)
首先,确保网站位于Intranet区域内(例如,仅http://servername/而不是http://www.servername.com/),或者您需要将您的FQDN添加到IE可信站点安全设置。
其次,如果您没有使用Intranet区域,请确保IE正在发送凭据 - 工具 - &gt;互联网选项 - &gt;安全 - &gt;自定义级别 - &gt;用户身份验证 - &gt;登录 - &gt;使用当前用户名和密码自动登录
答案 4 :(得分:-3)
用户是否使用其AD域/用户名登录该站点,如果是,请抓取该用户名/域名?
如果没有,你将无法得到这个,如果一个随机网站可以获取当前用户登录的域名/用户名,这将是一个巨大的安全问题不是吗?