我遇到了一个特殊的请求:我有一个使用表单身份验证的网站,但现在需要在某个时候获取WindowsPrincipal(Windows身份验证)才能重用它。
我的第一直觉是创建一个新页面,并在IIS上为该精确页面禁用匿名访问。当我在该页面上时,Request.ServerVariables["LOGON_USER"]
按预期为我提供了当前的Windows登录名。
不幸的是,Context.User
仍然给了GenericPrincipal
。
关于如何在FormsAuthentication应用程序中获取当前WindowsPrincipal的任何想法? (通过询问用户输入密码来重新创建它不是一种选择)
答案 0 :(得分:-1)
找到它:Context.Request.LogonUserIdentity
是在这种情况下应该使用的。
如果在IIS上禁用匿名访问,它将返回发出请求的Windows用户(否则它将返回IIS匿名用户)。
对于那些对如何重用它感兴趣的人:
lblUserName.Text = WindowsIdentity.GetCurrent().Name;
// will return the ASP.Net user (that's useless to us)
WindowsIdentity id = Context.Request.LogonUserIdentity;
WindowsImpersonationContext ctx = id.Impersonate();
try
{
lblUserName.Text = WindowsIdentity.GetCurrent().Name;
// will return the correct user
// (...) do your stuff
}
finally
{
ctx.Undo();
}