Ich baute einen Identity Server mit IdentityServer4 mit Asp.NET Core Identity auf Asp.NET Core. Ich möchte die Eigenschaften meines ApplicationUsers den Ansprüchen zuordnen, die gesendet werden, wenn ein Client auf UserInfoEndpoint zugreift.Meine IUserClaimsPrincipalFactory Implementierung verursacht StackOverflowException auf IdentityServer4
Ich versuchte IUserClaimsPrincipalFactory zu implementieren, wie folgt:
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;
}
}
und registrieren Sie es mögen:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders()
.AddClaimsPrincipalFactory<CustomUserClaimsPrincipalFactory>();
aber ich bin immer Stackoverflow, wenn der Client die UserInfoEndpoint zuzugreifen versucht.
Können Sie mir bitte helfen, dies zu beheben?
Hinweis: Ich habe es getestet und bekomme keine Fehler, wenn ich die ClaimsPrincipal-Fabrik nicht registriere.
'var principal = await CreateAsync (Benutzer);' Sie rufen die Methode rekursiv auf, bis der Stack voll ist. Sie möchten hier etwas anderes, einen Usermanager oder das Repository aufrufen? – Tseng