为什么<deny users =“”?/>是否包含在以下示例中?


77

?通配符表示未经授权的用户,同时*代表了所有用户,认证和未。我的书显示了以下URL授权示例:

<authorization>
  <deny users="?" />
  <allow users="dan,matthew" />
  <deny users="*" />
</authorization>


但是上面的代码不具有与以下相同的效果:

<authorization>
  <allow users="dan,matthew" />
  <deny users="*" />
</authorization>

还是作者<deny users="?" />出于某种原因也加入了 规则?

Answers:


93

ASP.NET优先考虑从配置文件授予访问权限。如果存在潜在冲突,则以第一个出现的授予为准。所以,

deny user="?" 

拒绝访问匿名用户。然后

allow users="dan,matthew" 

向该用户授予访问权限。最后,它拒绝所有人访问。由于除dan,matthew之外的每个人都被拒绝访问,这一点动摇了。

编辑为添加:并且正如@Deviant指出的那样,拒绝访问未经身份验证是没有意义的,因为最后一个条目也包含未经身份验证的内容。可以在以下网站找到讨论该主题的优秀博客文章:Guru Sarkar的博客


41

“在运行时,授权模块从最本地的配置文件开始遍历allow和deny元素,直到授权模块找到适合特定用户帐户的第一个访问规则。然后,授权模块授予或拒绝访问URL资源取决于找到的第一个访问规则是允许还是拒绝规则。默认授权规则是。因此,默认情况下,除非另有配置,否则允许访问。”

文章在MSDN

deny = * means deny everyone
deny = ? means deny unauthenticated users

在您的第一个示例中,deny *不会影响dan和matthew,因为它们已被前面的规则允许。

根据文档,这两个规则集没有区别。


4

示例1适用于使用表单身份验证的asp.net应用程序。这是Internet应用程序的常见做法,因为在对某个安全模块进行身份验证之前,用户未经身份验证。

示例2适用于使用Windows身份验证的asp.net应用程序。Windows身份验证使用Active Directory对用户进行身份验证。将会阻止访问您的应用程序。我在Intranet应用程序上使用此功能。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.