JWT中的声明与资源中的声明转换

时间:2016-06-20 06:41:19

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

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

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

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

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

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

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

推荐的做法是什么?

问题2

如果我有后台服务(特别是Azure工作者),我也希望能够访问我的API资源,我可以使用客户端凭据流为该服务提供访问令牌。 但是,我如何才能为此服务提供上述相同的声明(CanViewQuestions)?我基本上想要使用我的API来确保给定资源需要声明CanViewQuestions,但我不关心客户端是Web应用程序(例如最终用户)还是客户端(没有最终用户)。如果请求者有索赔,那就好了。

我将不得不:

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

b)在JWT中嵌入声明(虽然我读过客户端凭据流不支持声明)

c)还有别的吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

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

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