我试图了解:
之间的区别<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="?"
匹配 ->访问被拒绝,第二个规则未检查。