2017-01-07 6 views
2

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.

+1

'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

Antwort

1

nicht diese Linie rekursiv ist, wird die Funktion selbst rekursiv in einer Endlos-Schleife

var principal = await CreateAsync(user); 

AngelegtVon ist die Funktion, die Sie in anrufen und Sie nennen es wieder rekursiv, die eine Endlosschleife erzeugt, damit Überlauf-Stack

+2

Verdammt. Ich werde meinen Computer formatieren, die Programmierung aufgeben und Mode-Blogger werden. – Hasan

Verwandte Themen