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

Sou*_*ceC 71 asp.net authentication authorization forms-authentication asp.net-membership

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

<authorization>
  <deny users="?" />
  <allow users="dan,matthew" />
  <deny users="*" />
</authorization>
Run Code Online (Sandbox Code Playgroud)


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

<authorization>
  <allow users="dan,matthew" />
  <deny users="*" />
</authorization>
Run Code Online (Sandbox Code Playgroud)

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

Cyb*_*ist 86

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

deny user="?" 
Run Code Online (Sandbox Code Playgroud)

拒绝访问匿名用户.然后

allow users="dan,matthew" 
Run Code Online (Sandbox Code Playgroud)

授予对该用户的访问权限.最后,它否认访问每个人.除了dan之外,所有人都被拒绝了,马修被拒绝进入.

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


Cha*_*ant 38

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

文章在MSDN

deny = * means deny everyone
deny = ? means deny unauthenticated users
Run Code Online (Sandbox Code Playgroud)

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

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