开启UpdateAccessTokenClaimsOnRefresh后,Identity Server 4刷新令牌未更新访问令牌声明
可能导致Identity Server 4刷新令牌不更新访问令牌声明的原因
以下是几个常见的排查方向:
IProfileService实现未拉取最新用户声明
刷新令牌时,Identity Server会调用IProfileService.GetProfileDataAsync生成新访问令牌的声明。如果你的实现依赖了缓存(内存/分布式缓存)或复用了授权时的旧数据,而非从数据库、LDAP等权威数据源实时拉取用户最新信息,就会导致新access token的声明和旧令牌一致。需要确保该方法每次都从最新数据源获取用户声明。客户端未配置对应Scope
若需要更新的声明属于特定Scope(比如roles、profile),但客户端配置的AllowedScopes未包含这些Scope,Identity Server不会将对应的声明加入新的access token。检查你的客户端配置是否添加了所有需要包含声明的Scopes。用户会话缓存未及时失效
Identity Server默认会缓存用户会话信息,若用户声明更新后会话缓存未失效,刷新时会直接使用缓存中的旧声明。可以调整Identity Server的缓存配置,或在用户信息变更时主动清除对应会话缓存。刷新令牌关联的授权上下文未更新
刷新令牌与用户授权上下文绑定,若用户声明变更后未触发授权上下文更新(比如未重新登录、未主动刷新会话),部分场景下Identity Server不会强制重新获取声明。这种情况可以在用户信息变更时,主动作废用户的所有刷新令牌,让用户重新授权以获取含新声明的令牌。
附你的客户端配置:
new Client { ClientId = "AngularClient", UpdateAccessTokenClaimsOnRefresh = true, AccessTokenLifetime = 60, AllowOfflineAccess = true, AbsoluteRefreshTokenLifetime = 259200, RefreshTokenUsage = TokenUsage.OneTimeOnly, AllowedCorsOrigins = new [] { "http://localhost:4200", "https://localhost:7193" } }
内容的提问来源于stack exchange,提问作者Andrеw
相关产品推荐
相关产品推荐

