在 IdentityServer4 中更改用户声明后获取新访问令牌的正确方法
Correct way to get a new access token after changing a user's claims in IdentityServer4
我将 IdentityServer4 与 Angular 8 和 Web API 一起使用。
当用户注册时,我会使用 oidc-client userManager.signinSilent 方法自动登录。
我在更新用户声明后使用相同的方法更新访问令牌。例如,用户可能会为一项服务付费,所以我需要更新用户的声明并将其反映在 UI.
的访问令牌中
这是更新访问令牌的正确方法吗?
根据规范,JWT 一旦发布就无法更新。因此,唯一的选择是通过设置 ttl(Identityserver 中的客户端的 AccessTokenLifetime 属性)相当短,automaticSilentRenew = true 并可选择使用 accessTokenExpiringNotificationTime 参数(最后两个在 oidc 客户端)来替换令牌。
另一种方法是在 API 端使用参考令牌而不是默认的 JWT IdentityServer4.AccessTokenValidation。
最后,最直接的方法是将身份验证和权限解耦,使令牌包含用户的身份以及[=24=中的一组预定义范围] 仅用于调用 application。 用户的实时权限来自单独的服务,例如this。
在您的 IDP 客户端设置中使用此 属性。
'UpdateAccessTokenClaimsOnRefresh'
获取或设置一个值,该值指示是否应根据刷新令牌请求更新访问令牌(及其声明)。
我将 IdentityServer4 与 Angular 8 和 Web API 一起使用。
当用户注册时,我会使用 oidc-client userManager.signinSilent 方法自动登录。
我在更新用户声明后使用相同的方法更新访问令牌。例如,用户可能会为一项服务付费,所以我需要更新用户的声明并将其反映在 UI.
的访问令牌中这是更新访问令牌的正确方法吗?
根据规范,JWT 一旦发布就无法更新。因此,唯一的选择是通过设置 ttl(Identityserver 中的客户端的 AccessTokenLifetime 属性)相当短,automaticSilentRenew = true 并可选择使用 accessTokenExpiringNotificationTime 参数(最后两个在 oidc 客户端)来替换令牌。
另一种方法是在 API 端使用参考令牌而不是默认的 JWT IdentityServer4.AccessTokenValidation。
最后,最直接的方法是将身份验证和权限解耦,使令牌包含用户的身份以及[=24=中的一组预定义范围] 仅用于调用 application。 用户的实时权限来自单独的服务,例如this。
在您的 IDP 客户端设置中使用此 属性。
'UpdateAccessTokenClaimsOnRefresh'
获取或设置一个值,该值指示是否应根据刷新令牌请求更新访问令牌(及其声明)。