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

时间:2009-05-06 21:58:56

标签: asp.net authentication asp.net-membership forms-authentication authorization

?通配符表示未经身份验证的用户,而*表示所有用户,经过身份验证和未经身份验证。我的书显示了以下URL授权示例:

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


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

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

或作者是否还包含<deny users="?" />规则?

4 个答案:

答案 0 :(得分:82)

ASP.NET根据优先级从配置文件授予访问权限。在潜在冲突的情况下,首先发生的授权优先。所以,

deny user="?" 

拒绝访问匿名用户。然后

allow users="dan,matthew" 

授予该用户访问权限。最后,它拒绝接触每个人。除了dan之外,所有人都被拒绝了,马修被拒绝进入。

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

答案 1 :(得分:37)

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

MSDN

的文章
deny = * means deny everyone
deny = ? means deny unauthenticated users

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

请参阅以下两个链接:

拒绝授权元素(ASP.NET设置架构) http://msdn.microsoft.com/en-us/library/vstudio/8aeskccd%28v=vs.100%29.aspx

允许元素进行授权(ASP.NET设置架构): http://msdn.microsoft.com/en-us/library/vstudio/acsd09b0%28v=vs.100%29.aspx