【问题标题】:Claims in JWT vs Claims Transformation in ResourceJWT 中的声明与资源中的声明转换
【发布时间】:2023-03-21 16:15:01
【问题描述】:

我在我的架构中使用 IdentityServer3 作为授权服务器。

我有一个 API 资源,我通过资源范围授予我的客户(Web 应用程序和 iOS 应用程序)访问权限。

问题 1: 如果我想在我的 API 中进行基于声明的授权(例如,只有部分用户拥有的名为 CanViewQuestions 的声明),我应该:

a) 使用 IdentityServer,例如在身份验证期间确定用户是否拥有该声明并将其添加到 JWT

b) 只需将主题(例如 userId)声明放入 JWT,然后在 API 中查找并执行声明转换?

我目前正在做 b),但想知道这是否应该由授权服务器(例如 IdSrv)自己执行?

推荐的方法是什么?

问题 2

如果我有一个后台服务(特别是 Azure Worker),我还想授予对我的 API 资源的访问权限,我可以使用客户端凭据流向该服务授予访问令牌。 但是,我怎样才能给这项服务同样的要求(CanViewQuestions)?我基本上想要我的 API 来确保给定资源需要声明 CanViewQuestions,但我不在乎客户端是 Web 应用程序(例如涉及的最终用户)还是客户端(没有最终用户)。如果请求者有索赔,那很好。

我必须:

a) 使用基于声明的转换来查看客户端是否是服务,然后只需添加所有声明?

b) 在 JWT 中嵌入声明(尽管我已阅读客户端凭据流不支持声明)

c) 别的?

非常感谢!

【问题讨论】:

    标签: .net authorization jwt claims-based-identity identityserver3


    【解决方案1】:

    对于这两种情况,我建议在 API 中添加特定于 API 的声明 - 而不是在令牌内。

    应始终将授权特定数据添加到尽可能靠近您要保护的资源的位置。

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 2017-01-15
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      相关资源
      最近更新 更多