【发布时间】: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