2017-02-02 2 views
2

Ich habe mit IdentityServer4 gespielt. Ich liebe es absolut.Was ist ein ProfileService/Wann wird ein ProfileService ausgeführt?

Ich habe auf Ihrer Website durch die Tutorials gegangen, speziell https://identityserver4.readthedocs.io/en/release/quickstarts/7_javascript_client.html

Ich habe einen Profildienst erstellt, die die folgenden:

public class ProfileService : IProfileService 
{ 
    public Task GetProfileDataAsync(ProfileDataRequestContext context) 
    { 
     context.IssuedClaims.Add(new Claim("test-claim", "test-value")); 
     return Task.FromResult(0); 
    } 

    public Task IsActiveAsync(IsActiveContext context) 
    { 
     context.IsActive = true; 

     return Task.FromResult(0); 
    } 
} 

Dies funktioniert gut, meine Gewohnheit Anspruch ist sichtbar in das Protokollfenster meines JS-Clients.

Ich legte einen Haltepunkt darauf, nur um zu überprüfen, was in dem Zusammenhang ist, und ich bemerkte, dass es zweimal getroffen wurde. Die Anrufereigenschaften waren ClaimsProviderAccessToken bzw. UserInfoEndpoint. Warum ist das?

In meiner Naivität entfernte ich den profile Umfang von meinem js-Client und in OIDC-js Config auch das Profil Umfang entfernt, und setzte loadUserInfo: false noch meine ProfileService es noch zweimal aufgerufen wird.

Wenn es mein Endziel ist, Ansprüche basierend auf Parametern aus einer Datenbank festzulegen, möchte ich diese Operation wirklich nicht zweimal machen, oder? (Echte Frage - ich weiß es nicht). Eine "Lösung" wäre, sie nur auf "ClaimsProviderAccessToken" zu setzen, aber es gibt etwas, das mir sagt, dass es einen Grund dafür gibt, dass ProfileServices zweimal aufgerufen wird und dass es wichtig ist, die Ansprüche für beide Durchläufe festzulegen.

Ps.s. Ich denke, es gibt hier einen Tippfehler https://github.com/IdentityServer/IdentityServer4/blob/dev/docs/quickstarts/8_entity_framework.rst Sollte dies nicht "Microsoft.EntityFrameworkCore.Tools.DotNet" im tools Abschnitt sein? und nicht "Microsoft.EntityFrameworkCore.Tools" Ich fand es unangebracht, ein neues Problem für etwas so Triviales zu erstellen, und nicht unbedingt falsch!

+0

'Microsoft.EntityFrameworkCore.Tools.DotNet' ist nur, wenn Sie möchten, dass die Befehle mit dem Befehl dotnet verfügbar sind, d. H.' Dotnet ef database update'. 'Microsoft.EntityFrameworkCore.Tools' ist immer noch vorhanden und verfügbar, wird aber nur in der Paketmanager-Konsole verfügbar sein (Powershell-Befehle, wie' Migration-Add' oder 'Datenbank-Update'), wie es in früheren Versionen von EF, wie EF6, verwendet wurde). Siehe auch http://github.com/aspnet/Announcements/issues/208 – Tseng

Antwort

5

Der Profilservice wird aufgerufen, wenn IdentityServer Ansprüche an einen Benutzer an Clientanwendungen zurückgeben muss.

Wenn Sie ein Identitäts- und Zugriffstoken anfordern, wird es zweimal aufgerufen (da Sie möglicherweise unterschiedliche Ansprüche in jeden Tokentyp eingeben).