ASPNETBoilerplate中自定义Claim认证后自动消失的原因咨询
JWT Token刷新未同步自定义Claim
如果项目采用JWT认证,登录时添加的自定义Claim仅存在于初始签发的Token中。当Token过期刷新时,若刷新逻辑未重新生成这些自定义Claim,新Token就会丢失它们。解决方式是重写TokenAuthProvider的CreateAccessTokenAsync方法,或者在IJwtTokenBuilder的构建流程中,确保每次生成Token时都加入自定义Claim。ABP ClaimsPrincipal缓存未包含自定义Claim
ABP默认会缓存用户的ClaimsPrincipal,缓存过期后重新获取用户信息时,若未把自定义Claim纳入缓存逻辑,就会导致Claim丢失。可以检查AbpClaimCacheOptions的配置,或者重写UserClaimsPrincipalFactory,在生成ClaimsPrincipal时主动添加自定义Claim;也可以实现IUserClaimProvider接口,把自定义Claim的获取逻辑整合进去。Cookie认证重建时未加载自定义Claim
若使用Cookie认证且开启了SlidingExpiration,Cookie过期重建时,系统可能仅加载默认Claim,未包含自定义的。需要在Cookie认证的OnValidatePrincipal事件中,重新从数据源获取并添加自定义Claim,确保每次重建Principal时都能带上这些Claim。自定义Claim未持久化或未从数据源重新获取
如果自定义Claim是登录时临时添加的,没有存储到用户的Claim表(比如AbpUserClaims),那么当Session重启、用户重新验证时,这些临时Claim就会消失。要么把自定义Claim持久化到数据库,要么在每次生成ClaimsPrincipal时,从自定义数据源(比如业务数据库)读取并添加。
内容的提问来源于stack exchange,提问作者jishan siddique

