【问题标题】:Verify claims/roles in token with Web API 2 bearer token使用 Web API 2 不记名令牌验证令牌中的声明/角色
【发布时间】:2016-06-22 04:51:50
【问题描述】:
我想确认不记名令牌中的声明在每次 API 调用时都是最新的,以便我确定给定用户仍然可以访问给定方法。
例如,对于以[Authorize(Roles = "admin")] 装饰的方法,我想确保在执行调用时用户是管理员,而不是在发出令牌时用户是管理员。
环顾四周后,我打算
写一个public class VerifyTokenAttribute : System.Web.Http.AuthorizeAttribute 全局应用它并在OnAuthorization 内部检查动作是否用Authorize 装饰,如果是,从数据库中获取用户信息并确认角色匹配。
有没有更好的办法?
【问题讨论】:
标签:
asp.net
asp.net-web-api
asp.net-web-api2
webapi2
【解决方案1】:
我打算做基本相同的事情。就我而言,存在“系统功能”的定义,其中系统中的角色可以执行许多系统功能。角色可以执行的功能可能会有所不同,管理员可以随时更改它们。
所以基本上,对于每个请求,我都应该获取用户拥有的所有角色,以及每个角色可以执行的所有系统功能。我考虑过创建一个如下所示的属性:[CustomAuthorize("Feature_Name")] 并将其应用于控制器(或操作)级别。然后,我需要检查“Feature_Name”是否是当前用户可以根据其角色执行的功能。
当然,这每次都需要访问数据库。
一个可能的改进是将此信息缓存在缓存服务器中,并且每次管理员更改用户权限时缓存都会失效。类似的东西。
所以,正如 Mayu 所说:有没有更好的方法?