是否有标准化的方法来区分访问令牌是通过客户端凭证还是授权代码流创建的?我知道授权代码流用于用户身份验证,并包含用户个人信息,但除了可能附加到 JWT 的那些声明之外,是否有一个标准的良好实践,可以在事先不知道的情况下知道通过特定流程创建了令牌?
1sbrub3j1#
一个选项是包括客户端声明,其特定于请求令牌的客户端。例如,使用IdentityServer,您可以在此处阅读更多关于ClientClaims的概念。ClientClaims是特定于客户端的声明,并且不会因用户而变化。由用户生成的访问令牌通常还包括AMR声明,并且使用客户端凭证流的访问令牌不包含AMR声明。在这里阅读更多关于AMR声明的信息。
yzuktlbb2#
对于大多数提供程序,如果使用了客户端凭据流,则sub声明将不会出现在访问令牌中。在OAuth 2.0和OIDC中,sub是指进行身份验证并向客户端提供授权的用户。在客户端凭据流中,没有用户。因此,没有sub声明。示例:
sub
{ "client_id": "12345678-1e82-4b65-5422-5d5a2412f604", "iss": "https://auth.server.com/12345678-d2f0-2685-8ec0-cf4cafd35d25/as", "iat": 1686873337, "exp": 1686873637, "aud": [ "abc" ], "scope": "abcScope" }
其他流程需要用户进行身份验证并授予授权。这些代币应该有一个“子”声明。示例(其中sub是用户的ID):
{ "client_id": "fa902d6a-aa45-0505-a7c6-a44b531c7636", "iss": "https://auth.server.com/12345678-d2f0-2685-8ec0-cf4cafd35d25/as", "iat": 1686873658, "exp": 1686877258, "aud": [ "https://api.server.com" ], "scope": "openid profile", "sub": "1732f103-1a0b-2244-123c-7977000e2154", "sid": "2da96319-e069-4be8-aebe-71087012509b", "env": "12345678-d2f0-2685-8ec0-cf4cafd35d25", "org": "a6fdcde8-0ae2-4b3c-08de-012345678912" }
2条答案
按热度按时间1sbrub3j1#
一个选项是包括客户端声明,其特定于请求令牌的客户端。
例如,使用IdentityServer,您可以在此处阅读更多关于ClientClaims的概念。ClientClaims是特定于客户端的声明,并且不会因用户而变化。
由用户生成的访问令牌通常还包括AMR声明,并且使用客户端凭证流的访问令牌不包含AMR声明。
在这里阅读更多关于AMR声明的信息。
yzuktlbb2#
对于大多数提供程序,如果使用了客户端凭据流,则
sub
声明将不会出现在访问令牌中。在OAuth 2.0和OIDC中,
sub
是指进行身份验证并向客户端提供授权的用户。在客户端凭据流中,没有用户。因此,没有sub
声明。示例:
其他流程需要用户进行身份验证并授予授权。这些代币应该有一个“子”声明。示例(其中
sub
是用户的ID):