更改用户后获取新访问令牌的正确方法';s在IdentityServer4中的索赔

更改用户后获取新访问令牌的正确方法';s在IdentityServer4中的索赔,identityserver4,oidc-client-js,Identityserver4,Oidc Client Js,我将IdentityServer4与Angular 8和Web API一起使用 当用户注册时,我会使用oidc client userManager.signinSilent方法自动将其登录 在用户的声明被更新之后,我使用相同的方法来更新访问令牌。例如,用户可能为服务付费,因此我需要更新用户的声明,并将其反映在UI的访问令牌中 这是更新访问令牌的正确方法吗?根据规范,一旦发布JWT,就无法更新它。因此,唯一的选择是通过设置ttl(Identityserver中客户端的AccessTokenLif

我将IdentityServer4与Angular 8和Web API一起使用

当用户注册时,我会使用oidc client userManager.signinSilent方法自动将其登录

在用户的声明被更新之后,我使用相同的方法来更新访问令牌。例如,用户可能为服务付费,因此我需要更新用户的声明,并将其反映在UI的访问令牌中


这是更新访问令牌的正确方法吗?

根据规范,一旦发布JWT,就无法更新它。因此,唯一的选择是通过设置ttl(Identityserver中客户端的AccessTokenLifetime属性)来替换令牌,ttl相当短,automaticSilentRenew=true,并且可以选择使用accessTokenExpiringNotificationTime参数(oidc客户端的最后两个参数)

另一种方法是使用引用令牌,而不是API端带有IdentityServer4.AccessTokenValidation的默认JWT


最后,最直接的方法是将身份验证和权限解耦,以便令牌包含用户的身份以及API中一组预定义的作用域,这些作用域仅用于调用应用程序。用户的实时权限来自一个单独的服务,例如一个。

在IDP中的客户端设置上使用此属性

'UpdateAccessTokenClaimsOnRefresh'

获取或设置一个值,该值指示是否应在刷新令牌请求时更新访问令牌(及其声明)