使用 IdentityServer 4 (4.1.2),我添加了一個實作 IProfileService 介面的類。GetProfileDataAsync 方法應該被呼叫多次(對于每個令牌),但我的方法只為訪問令牌(ClaimsProviderAccessToken)呼叫。
public class LocalUserProfileService : IProfileService
{
private readonly IIdentityProviderUserService _identityProviderUserService;
public LocalUserProfileService(IIdentityProviderUserService identityProviderUserService)
{
_identityProviderUserService = identityProviderUserService ??
throw new ArgumentNullException(nameof(identityProviderUserService));
}
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var subjectId = context.Subject.GetSubjectId();
var claims = (await _identityProviderUserService.GetUserClaimsBySubjectAsync(subjectId)).ToList();
Debug.WriteLine($"Adding claims to {context.Caller}");
context.IssuedClaims.AddRange(claims);
}
public async Task IsActiveAsync(IsActiveContext context)
{
var subjectId = context.Subject.GetSubjectId();
context.IsActive = await _identityProviderUserService.IsUserActiveAsync(subjectId);
}
}
我可以設法只使用我的訪問令牌來獲取自定義宣告,但我想知道為什么不為 identity_token 呼叫代碼,因為我更喜歡在兩個令牌中都有宣告。
uj5u.com熱心網友回復:
您是否將AlwaysIncludeUserClaimsInIdToken標志設定為 true?否則,ID 令牌的宣告將通過 UserInfo 端點提供。
減小 ID-token 大小的常用方法是不在 ID-token 中包含所有宣告。大令牌也會導致大會話 cookie。默認情況下,令牌存盤在會話 cookie 中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/476243.html
上一篇:Laravel8-Illuminate\Auth\EloquentUserProvider::validateCredentials()
