web.config的授权列表顺序?

时间:2014-02-04 06:47:17

标签: asp.net .net .net-4.0

我正在努力理解:

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

vs(更改顺序)

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

I've read that

  

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

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

但我也读到了:

  然而,

撤消这两行的顺序拒绝匿名   用户(通过匹配第一个规则)和允许所有其他用户(通过   匹配第二条规则)。

问题:

为什么的规则“一旦找到适用的规则,就停止搜索”在第二个例子中不适用?

我原以为它会拒绝所有匿名用户并停止(不会进入<allow users="*" />)。

1 个答案:

答案 0 :(得分:1)

这里没有真正的矛盾所以这句话仍然是正确的

  

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

但是,您需要了解*?的含义。

来自MSDN

Identity    Description  
*           Refers to all identities  
?           Refers to the anonymous identity

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

让我们走过两个配置:

<authorization>
   <allow users="*" />
   <deny users="?" />
</authorization> 
  • “常规”用户加入 - &gt; users="*"匹配 - &gt;允许访问,不检查第二条规则。

  • 匿名用户进来了 - &gt; users="*"匹配,因为它也匹配匿名用户 - &gt;允许访问,不检查第二条规则。

但在第二种情况下:

<authorization>
   <deny users="?" />
   <allow users="*" />
</authorization> 
  • “常规”用户加入 - &gt; users="?" 不匹配,因为它只匹配匿名用户 - &gt;检查第二个角色:匹配的users="*" - &gt;允许访问。

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