因为它们完全是不同的身份验证方案。
通过使用禁用的匿名访问(使用 Windows 帐户),一种是在技术上以开放模式运行应用程序(没有应用程序级别的身份验证)并依靠 IIS 拒绝向那些未通过您的域进行身份验证的人或无权查看页面)。由于 LOGON_USER 变量,应用程序只知道谁在运行它,但应用程序根本没有对用户进行身份验证。执行身份验证的是 IIS(它根据域名或组等拒绝用户)。
当您告诉应用程序通过 WINDOWS 进行身份验证时,您将该网站的应用程序帐户绑定到来自 IIS 的信息(LOGON_USER 变量)将被视为该应用程序帐户。
Forms Authentication 期望您生成一个实现 IPrincipal 的对象,并将其分配给应用程序以获取一组特定的请求(这允许您访问 Page.User.IsAuthenticated 之类的东西)。此外,它期望创建和设置一个 FormAuthenticationTicket(这是处理 cookie 什么的)。这些事情可以通过登录提供程序或手动完成。
现在,这是有趣的东西。
为了使用 FORMS 身份验证模式并禁用匿名访问,您只需使用通过 LOGON_User 变量传递给应用程序的信息自动将用户登录到系统(生成 FormsAuthentication cookie)。这可以通过检查用户是否已通过身份验证或围绕一组新请求(例如 application_authenticaterequest 或 application_sessionstart)的 Global.asax 方法来完成
或者,您可以允许匿名访问,但对您的 AD 服务器执行 FORMS 身份验证:http: //msdn.microsoft.com/en-us/library/ms998360.aspx