【发布时间】:2021-03-24 05:25:37
【问题描述】:
我有以下项目:
- Identity Server 4,使用 ASP.NET Identity 作为我所有应用的所有用户的用户存储。
- .NET Core 5 Web API
- Xamarin 应用程序
流程是这样的:
- 用户从 Xamarin 应用程序 (3) 登录并针对 IdentityServer (1) 进行身份验证
- 用户收到来自 Identity Server 的访问令牌,其中包含子声明
- 用户使用访问令牌向 Web API (2) 发出请求
- Web API (2) 检查自己的数据库中的用户权限
----问题/问题在这里-----
Web API 是否应该将这些用户声明(权限)添加到访问令牌中,或者 Web API 是否应该始终检查数据库以获取客户端发出的每个请求的用户权限?
-
也许我可以在使用 IdentityServer 进行身份验证之前添加声明,但这意味着 IdentityServer 可以访问 Web API 的数据库。由于关注点分离,我认为这不是一个好习惯。
-
另一种解决方案是在 Web API 验证令牌时引入缓存机制,这样它就不会总是检查数据库。
-
使用声明转换,据我了解,我只能将声明添加到这 1 个请求,这意味着下次客户端发出请求时,声明转换应该再次发生,因为它不会返回新的访问令牌给用户。
理想情况下,我希望 Web API 将声明添加到访问令牌,以便 Web API 可以在所有后续请求中信任这些声明。不过,我找不到这样做的方法。我搜索了 Claims Transformation、IssueJwtAsync (IdentityServerTools)、IProfileService,但我认为这些都不是解决这个问题的方法。
这是好的架构吗?请分享您对此主题和潜在解决方案的意见。
非常感谢!
【问题讨论】:
-
如果您决定使用自定义声明转换器,您可以在声明转换器中进行缓存。完整的解决方案在这里:stackoverflow.com/a/63441045/14072498
标签: asp.net-core authentication asp.net-core-webapi identityserver4 asp.net-authorization