定义一个比其授权类更少限制的Web API方法

问题描述 投票:0回答:2

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

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

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

c# asp.net-web-api asp.net-web-api2 authorization
2个回答
1
投票

据我所知,这是不可能的;我遇到了同样的问题并且认为它对安全性很糟糕。不幸的是,ASP.Net中存在很多模式,这使得实际上很难遵循良好的安全实践 - 所有人都能做到的是保持警惕。

你可以考虑将你不太安全的方法转移到一个完全不同的API控制器,只是为了在任何时候允许类范围内的安全声明具有最严格的强度。


0
投票

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

在这种情况下,通常有多个控制器是正常的,每个控制器由越来越少的限制性行为控制,甚至是匿名访问级别。匿名方法的一个示例是Register方法或Request Access方法。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.