0

我想确认不记名令牌中的声明在每次 API 调用时都是最新的,以便我确保给定用户仍然可以访问给定方法。

例如,对于一个用 I 装饰的方法,[Authorize(Roles = "admin")]我想确保在执行调用时用户是管理员,而不是在发出令牌时用户是管理员。

经过一番环顾后,我计划在public class VerifyTokenAttribute : System.Web.Http.AuthorizeAttribute全局范围内编写应用程序并在内部OnAuthorization检查操作是否被装饰,Authorize如果是,则从数据库中获取用户信息并确认角色匹配。

有没有更好的办法?

4

1 回答 1

0

我计划做基本相同的事情。就我而言,存在“系统功能”的定义,其中系统中的角色可以执行许多系统功能。角色可以执行的功能可能会有所不同,管理员可以随时更改它们。所以基本上,对于每个请求,我都应该获取用户拥有的所有角色,以及每个角色可以执行的所有系统功能。我考虑过创建一个如下所示的属性:[CustomAuthorize("Feature_Name")] 并将其应用于控制器(或操作)级别。然后,我需要检查“Feature_Name”是否是当前用户可以根据他们的角色执行的功能。当然,这每次都需要访问数据库。一个可能的改进是将此信息缓存在缓存服务器中,每次管理员更改用户权限时,缓存都会失效。类似的东西。所以,正如 Mayu 所说:有更好的方法吗?

于 2017-06-22T17:21:49.390 回答