使用jwt和许多角色进行基于角色的访问

时间:2019-07-02 07:43:55

标签: c# asp.net-core asp.net-web-api .net-core asp.net-identity

我有一个带有许多控制器的Web API。通过这些控制器,我定义了许多角色并装饰了控制器/功能。我要使用jwt来访问api。

我试图将我的角色像键值一样写入jwt。这很好用,但是如果我在jwt中设置了许多角色,令牌将变得很大。我在网上搜索,看到了一些解决方案,例如中间件,每次触发请求时,我都会获得用户的角色。我发现的第二个解决方案是为角色创建一个枚举,不要将名称保存在jwt中,而数字-> jwt变得更小。 我的问题是感觉不正确。 我使用.net核心和身份框架。 解决此问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

没有“最佳实践”。用JWT令牌存储角色是很正常的。但是具有角色声明的令牌有权访问您的网站,直到它过期为止,如果有人更新了用户的角​​色,则除非您具有令牌撤消逻辑,否则它不会影响令牌。在db中查找角色/权限将有助于系统提高安全性,因为它将始终获得该用户的最新角色。但是,如果您拥有大型应用程序,则这将影响服务器的性能,具体取决于发出的请求数。

在任何地方,请尽可能设计/管理您的角色,以避免用户拥有很多角色。