在Forms身份验证网站上获取当前的WindowsPrincipal

时间:2009-09-08 10:02:57

标签: asp.net authentication

我遇到了一个特殊的请求:我有一个使用表单身份验证的网站,但现在需要在某个时候获取WindowsPrincipal(Windows身份验证)才能重用它。

我的第一直觉是创建一个新页面,并在IIS上为该精确页面禁用匿名访问。当我在该页面上时,Request.ServerVariables["LOGON_USER"]按预期为我提供了当前的Windows登录名。

不幸的是,Context.User仍然给了GenericPrincipal

关于如何在FormsAuthentication应用程序中获取当前WindowsPrincipal的任何想法? (通过询问用户输入密码来重新创建它不是一种选择)

1 个答案:

答案 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();
}