【问题标题】:Add user claims after authentication against IdentityServer 4在针对 IdentityServer 4 进行身份验证后添加用户声明
【发布时间】:2021-03-24 05:25:37
【问题描述】:

我有以下项目:

  1. Identity Server 4,使用 ASP.NET Identity 作为我所有应用的所有用户的用户存储。
  2. .NET Core 5 Web API
  3. Xamarin 应用程序

流程是这样的:

  1. 用户从 Xamarin 应用程序 (3) 登录并针对 IdentityServer (1) 进行身份验证
  2. 用户收到来自 Identity Server 的访问令牌,其中包含子声明
  3. 用户使用访问令牌向 Web API (2) 发出请求
  4. Web API (2) 检查自己的数据库中的用户权限

----问题/问题在这里-----

Web API 是否应该将这些用户声明(权限)添加到访问令牌中,或者 Web API 是否应该始终检查数据库以获取客户端发出的每个请求的用户权限?

  • 也许我可以在使用 IdentityServer 进行身份验证之前添加声明,但这意味着 IdentityServer 可以访问 Web API 的数据库。由于关注点分离,我认为这不是一个好习惯。

  • 另一种解决方案是在 Web API 验证令牌时引入缓存机制,这样它就不会总是检查数据库。

  • 使用声明转换,据我了解,我只能将声明添加到这 1 个请求,这意味着下次客户端发出请求时,声明转换应该再次发生,因为它不会返回新的访问令牌给用户。

理想情况下,我希望 Web API 将声明添加到访问令牌,以便 Web API 可以在所有后续请求中信任这些声明。不过,我找不到这样做的方法。我搜索了 Claims Transformation、IssueJwtAsync (IdentityServerTools)、IProfileService,但我认为这些都不是解决这个问题的方法。

这是好的架构吗?请分享您对此主题和潜在解决方案的意见。

非常感谢!

【问题讨论】:

标签: asp.net-core authentication asp.net-core-webapi identityserver4 asp.net-authorization


【解决方案1】:

您需要在web api中添加这些权限,因为用户需要根据这些授予的权限访问相应的资源。并且在用户第一次登录时授予权限,无需每次请求都访问数据库。

在这种情况下,您可以使用Claims Transformation。这个link有更详细的步骤可以解决这个问题。

【讨论】:

    猜你喜欢
    • 2020-11-09
    • 2021-05-11
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    相关资源
    最近更新 更多