Я построил сервер идентификации с использованием IdentityServer4 с идентификатором ядра Asp.NET на Asp.NET Core. Я хочу сопоставить свойства моего ApplicationUser с запросами, отправленными, когда клиент обращается к UserInfoEndpoint.Реализация IUserClaimsPrincipalFactory вызывает StackOverflowException на IdentityServer4
Я пытался реализовать IUserClaimsPrincipalFactory следующим образом:
public class CustomUserClaimsPrincipalFactory : IUserClaimsPrincipalFactory<ApplicationUser>
{
public async Task<ClaimsPrincipal> CreateAsync(ApplicationUser user)
{
var principal = await CreateAsync(user);
((ClaimsIdentity)principal.Identity).AddClaims(new[] {
new Claim(ClaimTypes.GivenName, user.FirstName),
new Claim(ClaimTypes.Surname, user.LastName),
});
return principal;
}
}
и зарегистрировать это нравится:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders()
.AddClaimsPrincipalFactory<CustomUserClaimsPrincipalFactory>();
, но я получаю StackOverflowException, когда клиент пытается получить доступ к UserInfoEndpoint.
Не могли бы вы помочь мне исправить это?
Примечание: Я проверил его, и у меня нет ошибок, если я не зарегистрирую фабрику ClaimsPrincipal.
'var main = await CreateAsync (пользователь);' вы вызываете метод рекурсивно, пока стек не будет заполнен. Вы, вероятно, хотите назвать что-то другое здесь, какой-то usermanager или репозиторий? – Tseng