为什么在以下示例中包含 <deny users="?" /> ?

80

?通配符代表未经身份验证的用户,而*代表所有用户,包括已经身份验证的和未经身份验证的用户。我的书中提供了以下URL授权的示例:

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


但是上面的代码难道不与下面的代码产生相同的效果吗:

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

作者是否出于某种原因还包括了 <deny users="?" /> 规则?

4个回答

98

ASP.NET按照优先级从配置文件中授予权限。如果存在潜在冲突,则以首次出现的授予为准。

deny user="?" 

拒绝匿名用户访问。然后

allow users="dan,matthew" 

授予该用户访问权限。最后,拒绝所有人的访问。这意味着除了dan、matthew以外的所有人都被拒绝访问。

编辑补充:正如@Deviant指出的那样,拒绝未经身份验证的访问是没有意义的,因为最后一个条目也包括未经身份验证的访问。可以在Guru Sarkar的博客中找到一篇有关这个主题的好文章。


42
"在运行时,授权模块遍历允许和拒绝元素,从最本地的配置文件开始,直到找到第一个适合特定用户帐户的访问规则。然后,根据找到的第一个访问规则是允许还是拒绝规则,授权模块授予或拒绝对URL资源的访问。默认的授权规则是允许。因此,默认情况下,除非另有配置,否则允许访问。"
"文章位于 MSDN。"
deny = * means deny everyone
deny = ? means deny unauthenticated users

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

根据文档,在您的两个规则集中没有区别。


4

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

示例2适用于使用Windows身份验证的asp.net应用程序。Windows身份验证使用Active Directory对用户进行身份验证。此功能将防止访问您的应用程序。我在内部网络应用程序中使用此功能。


-1

4
你能解释一下这个回答是如何回答这个问题的吗?回答应该可以独立自成,链接只用于参考。 - Edward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接