USER“]与Request.LogonUserIdentity
我试图从ASP.Net应用程序的调用者获取当前的WindowsIdentity而不模仿。
阅读一些文章后,我的设置是:
出于测试目的,我写了下面的日志语句
m_techLogger.Warn(string.Format("Request[LOGON_USER] {0}", Request["LOGON_USER"]));
m_techLogger.Warn(string.Format("Request.LogonUserIdentity {0}", Request.LogonUserIdentity.Name));
m_techLogger.Warn(string.Format("HttpContext.Current.User.Identity {0}", HttpContext.Current.User.Identity.Name));
m_techLogger.Warn(string.Format("WindowsIdentity.GetCurrent() {0}", WindowsIdentity.GetCurrent().Name));
该声明返回了以下内容
2015-04-23 10:47:19,628 [7] WARN - Request[LOGON_USER] DOMAINUser
2015-04-23 10:47:19,681 [7] WARN - Request.LogonUserIdentity NT AUTHORITYSYSTEM
2015-04-23 10:47:19,681 [7] WARN - HttpContext.Current.User.Identity NT AUTHORITYSYSTEM
2015-04-23 10:47:19,681 [7] WARN - WindowsIdentity.GetCurrent() NT AUTHORITYSYSTEM
我知道WindowsIdentity.GetCurrent()。Name返回系统用户。 我不明白为什么Request.LogonUserIdentity和Request [LOGON_USER]的输出不同。 我需要来自用户的WindowsIdentity对象,其名称由Request [LOGON_USER]返回。
任何人都可以指引我走向正确的方向吗?
当我尝试相同的时候,我会得到
Request.LogonUserIdentity.Name "DOMAINaccountname" (no capital letter)
Request["LOGON_USER"] "DOMAINAccountname" (capital letters)
为了在我们的asp.net应用程序中获得当前用户,我使用这一行代码
User.Identity.Name
这有帮助吗?
请求[“LOGON_USER”]只是客户端发送到服务器的验证标头。 这意味着它是客户端向您的服务器发送请求的登录名。 除非激活模拟,否则此登录名不会根据Active Directory进行验证。 更多信息:https://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx
现在,如果不使用模拟,您就会被卡住。 您可以在服务器上针对您的AD在请求[“LOGON_USER”]中检查用户。 但我不建议你这样做。 因为敌对客户端可以在该字段中发送任何用户名,并在该用户存在的情况下登录到服务器。
这样做的正确方法是启用模拟,并使用AD组允许用户执行您的服务正在执行的操作,并通过将其添加到您的IIS配置中来激活该模式
<configuration>
<system.web>
<identity impersonate="true"/>
</system.web>
</configuration>
但是如果你真的不能使用模拟,你可以通过使用Win32 API模拟一个服务帐户来解决这个问题。 如果你想自己做这些,可以参考微软的https://msdn.microsoft.com/en-us/library/chf6fbt4.aspx和https://msdn.microsoft.com/en-us/library/system .security.principal.windowsidentity.aspx
或者你可以在这里找到一个很好的包装:你如何在.NET中进行模拟?
使用它就像这样简单:
using (new Impersonation(domain, username, password))
{
// probably connecting to some bad 3rd party stuff that needs a very specific access.
}
现在不知道更多关于你这样做的真正原因,我希望这会帮助你继续前进,只有在绝对必要时才能做到这一点
System.Web.HttpContext.Current.User.Identity.Name
获取或设置当前HTTP请求的安全信息。 (您网站上登录用户的名称)
Request.ServerVariables
获取Web服务器变量的集合。
Request属性提供对HttpRequest类的属性和方法的编程访问。 因为ASP.NET页面包含对System.Web命名空间(包含HttpContext类)的默认引用,所以可以在.aspx页面上引用HttpRequest的成员,而不使用对HttpContext的完全限定类引用。
结论两者的工作原理相同,但是,如果使用Request.ServerVariables
,则可以动态地迭代整个集合。
例如:
int loop1, loop2;
NameValueCollection coll;
// Load ServerVariable collection into NameValueCollection object.
coll=Request.ServerVariables;
// Get names of all keys into a string array.
String[] arr1 = coll.AllKeys;
for (loop1 = 0; loop1 < arr1.Length; loop1++)
{
Response.Write("Key: " + arr1[loop1] + "<br>");
String[] arr2=coll.GetValues(arr1[loop1]);
for (loop2 = 0; loop2 < arr2.Length; loop2++) {
Response.Write("Value " + loop2 + ": " + Server.HtmlEncode(arr2[loop2]) + "<br>");
}
}
链接地址: http://www.djcxy.com/p/84563.html
上一篇: USER"] vs. Request.LogonUserIdentity
下一篇: Adding UIAutomation Providers to Delphi controls (specifically grids)