定义一个 WebAPI 方法,该方法的限制比其授权类少



我希望定义一个具有[Authorize(Role="something")]属性的 ApiController,以便默认情况下添加到控制器的任何方法都需要"某物"角色,但我想使控制器上的几个方法比这限制更少,但不是匿名的。 我已经尝试了以下方法(单独尝试,不是一次全部):

[Authorize(Role="*")]
[Authorize(Role="Any")]
[Authorize(Role="")]
[Authorize]
[Authorize(Users="*", Roles="")]

但这些似乎都不起作用,仍然要求登录用户具有更严格的"某物"角色。 我不想更改类级别Authorize属性,因为这会使将来添加的方法容易受到正确保护。

据我所知,这是不可能的;我遇到了同样的问题,并同意这对安全性来说很糟糕。不幸的是,ASP.Net 有很多模式,这使得遵循良好的安全实践实际上非常困难 - 人们所能做的就是保持警惕。

您可以考虑将安全性较低的方法移动到完全不同的 API 控制器中,只是为了始终允许具有最严格强度的类范围安全声明。

如果我是你,我会看看控制器的重新设计。您所说的基本上是一些需要应用于所有方法的规则,但这里有一些不应该具有此默认行为的方法。这对我来说听起来根本不对,并且由于复杂的规则而容易出错。

在这种情况下,有多个控制器是正常的,每个控制器都由越来越少的限制行为控制,甚至下降到匿名访问级别。匿名方法的一个示例是注册方法或请求访问方法。

这样做可以清楚地表明每个控制器应该遵循什么样的规则,其他人不必想知道发生了什么,也不必通过查看每一种方法来尝试制定复杂的规则。

你仍然可以遵循某种设计模式,例如假设你的API是RESTful的,你仍然可以坚持这一点,只是有一些例外,就像我在这里展示的那样。

最新更新