关于web.config中的模拟,身份验证和授权的混淆

时间:2011-06-14 18:39:50

标签: asp.net active-directory web-config single-sign-on

我正在尝试在我的asp.net网站项目中检索当前用户的Windows登录用户名。

我的web.config文件包含以下内容

        <identity impersonate="true"/>
        <authentication mode="Forms">
            <forms name="app" path="/path" loginUrl="/path/login.aspx" protection="All" timeout="100" />
        </authentication>
        <authorization>
            <deny users="?" />
                <allow users="*"/>
        </authorization>

我的理解是,使用此配置,我应该能够从WindowsIdentity.GetCurrent().Name检索Domain \ username。但是,此属性返回NT AUTHORITY \ IUSR,它是匿名访问的用户。如果我没有记错,我拒绝在授权部分匿名访问该网站。我错过了什么?

另外值得注意的是:

System.Web.HttpContext.Current.Request.LogonUserIdentity.Name也会返回NT AUTHORITY \ IUSR,Request.ServerVariables["LOGON_USER"]会返回一个空字符串,这违反了此知识库文章http://support.microsoft.com/kb/306359中的信息

我正在使用.net 4.0和Windows 7开发环境。

导致我达到这一点的一些资源:

http://msdn.microsoft.com/en-us/library/ff647076.aspx

http://support.microsoft.com/kb/306158

http://forums.asp.net/t/1121780.aspx/1?Getting+a+users+DOMAIN+username+from+a+web+application

感谢您的时间。

修改

应该注意的是,我被锁定在表单身份验证中(Windows身份验证不是一个选项),因为这是一个多租户站点,并且大多数用户不会使用此单点登录功能。

1 个答案:

答案 0 :(得分:3)

如果您正在使用表单身份验证,则模拟无意义 - 它仅适用于Windows身份验证。这同样适用于Request.ServerVariables [“LOGON_USER”]。

您看到IUSR_的原因是因为这是运行该网站的Windows帐户,而您应该使用Page.CurrentUser(WebForms)或User属性(MVC控制器)而不进行转换。这将返回Forms Auth用户名。