【问题标题】:How to allow anonymous access to web-site on IIS 7.5?如何允许匿名访问 IIS 7.5 上的网站?
【发布时间】:2016-05-19 14:20:21
【问题描述】:

tl;dr:为什么会

<allow users="?">

在 IIS Express 上工作,但不在 IIS 上?

背景

我有一个新的 asp.net web-forms 项目。在 Windows 7 IIS Express 上本地运行时,我可以通过向 web.config 添加 deny * 规则来阻止 “所有用户” 访问该站点:

web.config

<configuration>
   <system.web>
      <authorization>
         <deny users="*" />
      </authorization>
   </system.web>
</configuration>

这导致我被拒绝访问:

所以这是有道理的。

我可以拒绝匿名用户的访问

在 web.config 中,我可以通过使用 ? 标记而不是 all (*) 标记来阻止对 匿名 用户的访问:

      <authorization>
         <deny users="?" />
      </authorization>

因为我没有通过身份验证,我将再次成为401 未经授权:

这是有道理的。

允许匿名

我可以通过将 web.config 中的 deny 更改为 allow 来允许匿名访问:

<authorization>
  <allow users="?" />
</authorization>

现在我被带到了主页:

这是有道理的。

但在 IIS 上不起作用

以上内容适用于 IIS Express。但是当我发布到 Windows Server 2012 R2 IIS 7.5 时,尝试 allow 匿名 (?) 用户不起作用:

这毫无意义:

  • 适用于 IIS Express
  • 在 IIS 7.5 上失败

尝试允许所有人

而不是:

  • 只允许匿名用户 (?)
  • 我可以尝试允许所有用户 (*)

我再次更改 web.config 以允许所有人 (*):

<authorization>
  <allow users="*" />
</authorization>

在本地我可以仍然访问该站点:

但一旦我发布到 IIS 7.5,它仍然会失败:

发生了什么事?

我没有做错任何事。那么我需要改变什么?

最初我创建了一个空网站,并开始向其中添加内容。后来,我需要创建真正的网站(带有显示信息的页面和单击按钮),所以我从一个 Empty Web Forms 网站重新开始。

我的感觉是欧文打破了一切。

但是,发生了什么事?

解决方案

我找到了。有一些关于网站的设置不与该网站一起使用。也就是说,您无法通过web.config 或网站文件夹中的任何其他文件配置有关网站的配置选项。特别是:

我不知道IIS 将匿名 身份验证的用途存储在哪里。但是如果没有匿名身份验证,IIS 就无法意识到匿名用户是匿名的。

启用匿名身份验证:

使 IIS 认识到匿名用户是匿名的。

这就解释了:

  • 为什么它适用于 IIS Express
  • 为什么它在 IIS 7.5 上不起作用
  • 为什么当两个网站都有完全相同的配置文件集时它仍然无法工作

它没有解释为什么 IIS 在未启用匿名身份验证时不将匿名用户视为匿名用户;但这是另一天的另一个问题。如果你已经阅读到这里,你可以复制粘贴我刚才说的所有内容,然后接受。否则我将不得不等待两天才能自己回答。最好得到代表。

【问题讨论】:

    标签: iis iis-7.5 iis-express


    【解决方案1】:

    您通过找到解决方案来学习一些东西。恭喜。

    授权发生在身份验证之后。因此,在 IIS 上,您在处理授权规则之前就看到了 401.2 错误页面。只有在启用了正确的身份验证方法后,事情才会开始解决。

    如果您禁用其所有身份验证方法,IIS Express 应该会为您提供相同的 401.2 错误页面。只是一个注释。


    Microsoft Patterns and Practices article 详细解释了为什么需要启用匿名身份验证才能允许匿名用户:

    ASP.NET 身份验证是一个两步过程。首先,

    • Internet 信息服务 (IIS) 对用户进行身份验证并创建一个 Windows 令牌来代表用户。
    • 如果 IIS 配置为使用匿名身份验证,则会生成 IUSR_MACHINE 帐户的令牌并用于代表匿名用户。

    IIS-然后将令牌传递给 ASP.NET。

    注意因为表单身份验证不依赖于 IIS 身份验证,如果您打算在 ASP.NET 应用程序中使用表单身份验证,则应在 IIS 中为您的应用程序配置匿名访问

    在 IIS 中,为所有使用表单身份验证的应用程序启用匿名访问。

    IIS 允许该请求,因为在 IIS 元数据库中启用了匿名访问。 ASP.NET 确认授权元素包含一个标记。

    在向 IIS 发出请求时,有两种方法可以对用户进行身份验证:

    • IIS 对您的身份进行身份验证(使用 Basic、Digest 或 Windows 身份验证)
    • IIS 配置为允许“匿名”身份验证,网站将自行处理身份验证

    这里令人困惑的部分是:

    • 匿名就 IIS 而言
    • 匿名就 ASP.net Forms 身份验证而言

    从 IIS 的角度来看,任何将使用 Forms(或 Owin,或任何其他自定义身份验证模块)进行身份验证的请求仍然是一个匿名请求:

    | IIS Authentication | Application Authentication |
    |--------------------|----------------------------|
    | Basic              |                            |
    | Digest             |                            |
    | Windows            |                            |
    | Anonymous          | Forms                      |
    | Anonymous          | Owin                       |
    | Anonymous          | BasicAuthModule            |
    

    当我试图允许匿名用户访问时:

    <allow users="?" />
    

    这是一个 Forms 身份验证指令。但为了实现表单身份验证,您必须在 IIS 级别允许匿名身份验证。

    【讨论】:

      猜你喜欢
      • 2015-08-30
      • 1970-01-01
      • 2019-11-23
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2012-07-05
      相关资源
      最近更新 更多