【发布时间】: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