2016-04-11 2 views
0

Wie kann ich die Daten von meinen lokalen AspNetUsers in das User.Identity-Objekt auffüllen, so dass es in ApiControllers verwendet werden kann?So füllen Sie lokale Informationen in User.Identity bei Verwendung von app.UseIdentityServerBearerTokenAuthentication()

Ich arbeite an einer ASP.NET-Clientanwendung, die eine IdentityServer3-Anwendung als Authentifizierungsanbieter verwendet. Ich sende ein Bearer-Token im Authorization-Header, der gut zu funktionieren scheint. In meiner Client-Anwendung verwende ich die folgende Middleware:

app.UseIdentityServerBearerTokenAuthentication(
     new IdentityServerBearerTokenAuthenticationOptions 
     { 
      Authority = settingsService.SsoProviderUrl + "/core/" 
     } 
    ); 

Derzeit User.Identity enthält die Informationen aus dem OpenID Connect-Anbieter. Groß! Ich möchte aber auch Informationen zum lokalen Benutzer hinzufügen. Ich habe Daten in AspNetUsers und AspNetUserLogins, um den Benutzer lokal darzustellen (AspNetUserLogins.ProviderKey entspricht der Teilnehmer-ID des Benutzers auf OpenId Connect).

Wie kann ich die Daten von meinen lokalen AspNetUsers in das User.Identity-Objekt auffüllen, so dass es in ApiControllers verwendet werden kann? Ich kann die Daten gut erhalten, es ist nur eine Frage der Daten in User.Identity, die mich ratlos ist.

+0

Anstatt zu versuchen, eine lokale Identität und externe Identität zusammenzuführen, lässt sich Identity Server nicht alle erforderlichen Ansprüche mit dem Zugriffstoken senden. Gibt es einen Grund, warum der Client eine lokale Identität hat? –

+0

Der andere Gedanke ist, dass Sie in Ihrer Web-API-Pipeline immer eine Anforderungsumwandlung durchführen können. –

Antwort

0

Die Lösung, auf der ich landete, war meine eigene Middleware zu erstellen, die nach UseIdentityServerBearerTokenAuthentiation() in die Pipeline eingesteckt wird. Die neue Middleware ruft einfach die Daten ab, die hinzugefügt werden sollen, und fügt die Ansprüche der aktuellen Identität hinzu. Beispielcode:

Verwandte Themen