web.config 的授权列表顺序?



我试图了解:

之间的区别
<authorization>
   <allow users="*" />
   <deny users="?" />
</authorization>

vs(更改顺序)

<authorization>
   <deny users="?" />
   <allow users="*" />
</authorization>

我已经阅读了

评估规则时,ASP.NET从顶部扫描列表 底部。一旦找到适用的规则,停止

因此,在第一个示例中:它将确定规则<allow users="*">适用于当前请求,并且将评估第二行。

,但我也读过:

反向这两行的顺序,但是, deny 匿名 用户(通过匹配第一个规则)和允许所有其他用户(通过 匹配第二个规则)。

问题:

为什么的规则"一旦找到适用的规则,它就会停止其搜索" 在第二个示例中不适用?

我期望它会拒绝所有匿名用户并停止(无需进入<allow users="*" />)。

这里没有真正的矛盾,因此此语句仍然为ture

评估规则时,ASP.NET从上到下扫描列表。一旦找到适用的规则,它就会停止其搜索。

但是,您需要了解*?的意思是什么。

来自msdn

身份描述*指所有身份?指匿名身份

因此,这意味着*匹配所有用户:匿名和身份验证的用户,但是?仅与匿名用户匹配。

所以让我们走到两个配置:

<authorization>
   <allow users="*" />
   <deny users="?" />
</authorization> 
  • a"常规"用户进来 -> users="*"匹配 ->允许访问,第二个规则未检查。

  • 一个匿名用户进来 -> users="*"匹配,因为它也与匿名用户匹配 ->允许访问,第二个规则未检查。

,但在第二种情况下:

<authorization>
   <deny users="?" />
   <allow users="*" />
</authorization> 
  • "常规"用户进来 -> users="?" 不匹配,因为它仅与匿名用户匹配 ->检查第二个角色:允许访问访问的users="*"

  • 匿名用户进来 -> users="?"匹配 ->访问被拒绝,第二个规则未检查。

最新更新