0

是否有可能:

禁止 IIS 中的匿名访问

有...

<authenticate mode="Forms"/>

...在网络配置中?我们需要访问 ASP.Net Membership 提供程序访问 LOGON_USER 服务器变量中的 Windows 用户名。

我们发现,如果我们还将身份验证模式设置为“Windows”,那么在 IIS 中禁止匿名访问只会填充 LOGON_USER ......然后不允许我们使用成员资格提供程序。

我很困惑为什么“表单”模式会导致空的 LOGON_USER 变量。

4

1 回答 1

2

因为它们完全是不同的身份验证方案。

通过使用禁用的匿名访问(使用 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

于 2009-08-13T18:12:26.773 回答