gpt4 book ai didi

Asp.Net 授权规则优先级

转载 作者:行者123 更新时间:2023-12-02 05:32:16 24 4
gpt4 key购买 nike

我正在为 Microsoft 考试而学习,正在做一些样题。我有这个问题:

“您正在开发一个配置为使用成员身份和角色提供程序的 ASP.NET Web 应用程序。

您需要允许所有用户执行 HTTP GET,但必须只允许名为 Moderator 的用户执行 POST 操作。您应该将哪个配置添加到 web.config 文件中?”

<authorization>
<deny verbs="POST" users="*" />
<allow verbs="POST" users="Moderator" />
<allow verbs="GET" users="*" />
</authorization>

<authorization>
<allow verbs="GET" users="*" />
<allow verbs="POST" users="Moderator" />
<deny verbs="POST" users="*" />
</authorization>

还有其他两个答案,但它们显然是错误的,所以我没有在这里复制它们。

我能发现两组规则之间的唯一区别是规则的放置顺序。

正确答案是第二组规则。这里的规则首先允许“版主”进行 POST 访问,然后为其他所有人删除它。这对我来说似乎违反直觉 - 给 1 个人一个特权,然后从每个人中删除该特权,但此后 1 个人仍然拥有特权。

如果有的话,第一组规则更有意义 - 首先拒绝所有人,然后有选择地向个人授予访问权限。显然这是错误的!

任何人都可以解释为什么会这样,以便我更好地理解吗?

最佳答案

这只是一个先到先得的情况。 ASP.NET 按顺序处理规则,直到找到匹配的规则,因此在第一种情况下,它将在 POST 之前命中 deny 规则它达到了允许

If anything the first set of rules makes more sense - first deny everyone then selectively give access to individuals.

这不是它的工作原理。规则是根据请求检查的,因此,第一条规则基本上是这样说的:

  1. 拒绝所有人的所有POST 请求。
  2. 允许版主的 POST 请求。
  3. 允许每个人的GET 请求。

所有的顺序。这里的问题是,当版主发送 POST 请求时,它将匹配第一条规则(因为它适用于所有人)并被拒绝。然而,第二种情况是说:

  1. 允许每个人的GET 请求。
  2. 允许版主的 POST 请求。
  3. 拒绝所有人的POST 请求。

因此当 Moderator 发送一个 Post 请求时,它将匹配第二条规则并允许请求继续。如果其他任何人发送 POST 请求,他们将符合第 3 条规则并被拒绝。

关于Asp.Net 授权规则优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12211913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com