是否可以:
禁止在IIS中进行匿名访问
和
...有
<authenticate mode="Forms"/>
...在Web配置中?我们需要访问ASP.Net成员资格提供程序和访问LOGON_USER服务器变量中的Windows用户名。
我们发现,如果我们还将身份验证模式设置为“Windows”,那么在IIS中禁止匿名访问只会填充LOGON_USER ...然后我们不会使用成员资格提供程序。
我很困惑为什么“Forms”模式会导致一个空的LOGON_USER变量。
答案 0 :(得分:2)
因为它们完全是不同的身份验证方案。
通过使用禁用匿名访问(使用Windows帐户),一个在技术上是运行在开放模式的应用程序(没有应用级认证),并依靠IIS否认页面,谁可能是没有用认证的那些人您的域名或无权查看页面)。由于LOGON_USER变量,应用程序只知道正在运行它的人,但应用程序根本没有对用户进行身份验证。执行身份验证的是IIS(根据域名或组等拒绝用户)。
当您告诉应用程序通过WINDOWS进行身份验证时,您将该网站的应用程序帐户绑定到来自IIS的信息(LOGON_USER变量)将被视为该应用程序帐户。
Forms Authentication,希望您生成一个实现IPrincipal的对象,并将其分配给应用程序以获取特定的请求集(允许您访问诸如Page.User.IsAuthenticated之类的内容)。此外,它期望创建和设置FormAuthenticationTicket(这是处理cookie而不是。)这些事情可以通过登录提供程序或手动完成。
现在,这是有趣的东西。
在为了使用FORMS认证模式和禁用匿名访问,所有必须要做的就是自动使用户登录到系统(生成FormsAuthentication cookiee)用传递给经由LOGON_USER可变应用程序的信息。这可以通过检查用户是否已经过身份验证或者Global.asax方法是否围绕一组新请求(例如application_authenticaterequest或application_sessionstart)来完成
或者,您可以允许匿名访问,但是要对您的AD服务器执行FORMS身份验证:http://msdn.microsoft.com/en-us/library/ms998360.aspx