为 Authorization 定义一个比其 class 限制更少的 Web API 方法
Define a WebAPI method that is less restricted than its class for Authorization
我希望定义一个具有 [Authorize(Role="something")]
属性的 ApiController,以便默认情况下添加到控制器的任何方法都需要 "something" 角色,但我想创建一个控制器上的几个方法比这个限制少,但不是匿名的。我已经尝试了以下(分别地,而不是一次全部):
[Authorize(Role="*")]
[Authorize(Role="Any")]
[Authorize(Role="")]
[Authorize]
[Authorize(Users="*", Roles="")]
但是其中 none 似乎有效,仍然要求登录用户具有更严格的 "something" 角色。我不想更改 class 级别 Authorize
属性,因为这会使将来添加的方法容易得不到适当保护。
据我所知,这是不可能的;我遇到了同样的问题并同意这对安全性很糟糕。不幸的是,ASP.Net 中有很多模式,这使得遵循良好的安全实践实际上变得非常困难 - 人们所能做的就是保持警惕。
您可以考虑将安全性较低的方法转移到完全不同的 API 控制器中,只是为了始终允许 class 范围内的最严格强度的安全声明。
如果我是你,我会考虑重新设计控制器。你所说的基本上是一些需要应用于所有方法的规则,但这里有一些方法不应该有这种默认行为。这对我来说根本不对,而且由于复杂的规则很容易出错。
在这种情况下,有多个控制器是正常的,每个控制器都由越来越少的限制行为控制,甚至可以达到匿名访问级别。匿名方法的一个示例是 Register 方法,或 Request Access 方法。
这样做可以清楚每个控制器应该遵循什么样的规则,而其他人不必想知道发生了什么,也不必通过查看每一个方法来尝试制定复杂的规则。
你仍然可以坚持某种设计模式,例如假设你的 API 是 RESTful,你仍然可以坚持,只是有一些例外,就像我一样显示在这里。
我希望定义一个具有 [Authorize(Role="something")]
属性的 ApiController,以便默认情况下添加到控制器的任何方法都需要 "something" 角色,但我想创建一个控制器上的几个方法比这个限制少,但不是匿名的。我已经尝试了以下(分别地,而不是一次全部):
[Authorize(Role="*")]
[Authorize(Role="Any")]
[Authorize(Role="")]
[Authorize]
[Authorize(Users="*", Roles="")]
但是其中 none 似乎有效,仍然要求登录用户具有更严格的 "something" 角色。我不想更改 class 级别 Authorize
属性,因为这会使将来添加的方法容易得不到适当保护。
据我所知,这是不可能的;我遇到了同样的问题并同意这对安全性很糟糕。不幸的是,ASP.Net 中有很多模式,这使得遵循良好的安全实践实际上变得非常困难 - 人们所能做的就是保持警惕。
您可以考虑将安全性较低的方法转移到完全不同的 API 控制器中,只是为了始终允许 class 范围内的最严格强度的安全声明。
如果我是你,我会考虑重新设计控制器。你所说的基本上是一些需要应用于所有方法的规则,但这里有一些方法不应该有这种默认行为。这对我来说根本不对,而且由于复杂的规则很容易出错。
在这种情况下,有多个控制器是正常的,每个控制器都由越来越少的限制行为控制,甚至可以达到匿名访问级别。匿名方法的一个示例是 Register 方法,或 Request Access 方法。
这样做可以清楚每个控制器应该遵循什么样的规则,而其他人不必想知道发生了什么,也不必通过查看每一个方法来尝试制定复杂的规则。
你仍然可以坚持某种设计模式,例如假设你的 API 是 RESTful,你仍然可以坚持,只是有一些例外,就像我一样显示在这里。