如何允许IIS 7.5上的匿名访问网站?

时间:2016-05-19 14:20:22

标签: iis iis-7.5 iis-express

tl; dr :为什么

<allow users="?">

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

背景

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

的web.config

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

这导致我被拒绝访问:

enter image description here

这样才有意义。

我可以拒绝访问匿名用户

我是web.config,我可以使用?标记阻止访问匿名用户,而不是所有({{1} })marker:

*

因为我没有通过身份验证,我将再次 <authorization> <deny users="?" /> </authorization> 未经授权:

enter image description here

这是有道理的。

允许匿名

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

allow

现在我被带到了主页:

enter image description here

这是有道理的。

但不适用于IIS

以上适用于IIS Express。但是,当我发布到Windows Server 2012 R2 IIS 7.5时,尝试<authorization> <allow users="?" /> </authorization> 匿名(allow)用户不起作用:

enter image description here

这没有任何意义:

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

尝试允许每个人

而不是:

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

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

*

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

enter image description here

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

enter image description here

发生了什么事?

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

最初我创建了一个空的网站,并开始向它添加内容。后来,我需要创建真正的网站(显示信息的页面和点击按钮),所以我重新开始使用空Web窗体网站

我的感觉是Owin打破了一切。

然而,发生了什么?

解决方案

我找到了。有一些关于网站的设置不适用于网站。也就是说,有关于无法通过<authorization> <allow users="*" /> </authorization> 或网站文件夹中的任何其他文件配置的网站的配置选项。特别是:

enter image description here

我不知道IIS存储使用匿名身份验证的位置。但是,如果没有匿名身份验证,IIS无法识别匿名用户是匿名用户。

启用匿名身份验证:

enter image description here

导致IIS意识到匿名用户是匿名的。

这解释了:

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

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

1 个答案:

答案 0 :(得分:6)

您通过寻找解决方案来学习一些东西。祝贺。

授权在身份验证后发生。因此,在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对您的身份进行身份验证(使用基本,摘要或Windows身份验证)
  • IIS配置为允许&#34;匿名&#34; 身份验证,并且网站将自行处理身份验证

这里令人困惑的部分是:

之间存在差异
  • 匿名就IIS而言
  • 匿名目前就ASP.net Forms身份验证而言

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

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

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

<allow users="?" />

这是 Forms 身份验证指令。但是,为了甚至达到表单身份验证,您必须在IIS级别允许匿名身份验证。