2017-01-02 6 views
4

Ich versuche, eine Identity-Provider-Anwendung mit IdentityServer4 zu erstellen; Momentan verwende ich den "Resource Owner Password Credentials" -Fluss und es gibt access_token und refresh_token vom Token-Endpunkt zurück.Wie ID_Token zusammen mit Access_Token von IdentityServer4 über "Passwort" Grant_Type?

Codeschnipsel für TokenEndpoint von Client-

var tokenClient = new TokenClient(<TokenEndpoint>, <ClientId>, <ClientSecret>);   
var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync(<UserName>, <password>, <Scopes>); 

Meine Frage zu stellen ist, wie zusammen mit „access_token“ und „refresh_token“ „id_token“ zu erhalten, indem die gleichen „Ressourcen Owner Passwort Credentials“ Fluss mit ?

Antwort

8

Wie bekomme ich "id_token" zusammen mit "access_token" und "refresh_token" unter Verwendung des gleichen "Resource Owner Password Credentials" -Flusses?

Sie nicht.

In IdentityServer4 stellt der Ressourcenberechtigungsnachweis für Ressourceneigentümer nur Zugriffstoken zur Verfügung. Wenn Sie auch ein ID-Token möchten, verwenden Sie den Autorisierungscode-Flow, den impliziten Code-Flow oder den Hybrid-Flow.

         access_token id_token refresh_token 

Resource Owner Password Credentials  yes   -   yes 

Authorization Code       yes   yes   yes 

Implicit Flow        yes   yes   - 

Da Sie wollen alle drei Token-Typen, und da Sie serverseitigen Code angezeigt werden, indem der Strömungsautorisierungscode paßt am besten. Some kinds of Hybrid Flow wird auch für Sie arbeiten.

From the docs:

Die OAuth 2.0 Ressourceneigentümer Passwort Zuschuss ermöglicht es einem Client an den Token-Service-Benutzernamen und Passwort zu senden und einen Zugang zu bekommen Token zurück, die dieser Benutzer darstellt.

From a GitHub issue:

OpenID Connect legt nicht den Fluss Ressourceneigentümer - nur interaktive Anmeldungen bei den Autorisierungsserver (wie Code oder implizite Flow). Also [in anderen Worten,] kein Identitäts-Token - nur Zugriffstoken.

+0

Dank @Shaun. Gibt es eine andere Möglichkeit, um access_token und id_token vom Token-Endpunkt zu bekommen? –

+0

@ codeninja.sj Ja. Sie können einen der OpenID Connect-Flüsse verwenden. In Ihrem Fall scheint der Autorisierungscode der beste Kandidat zu sein. Wenn Sie eine Webbrowser-basierte Anwendung erstellen, möchten Sie jedoch den Implicit Flow. –

+0

Authorization Code Flow akzeptiert nur "Benutzername" und "Passwort", aber nicht "client_id" und "client_secret"; "Impliziter Codefluss" akzeptiert "client_id" und "client_secret", aber nicht "username" und "password". Aber ich muss alle diese Parameter übergeben, um Token zu bekommen. Gibt es einen anderen besseren Weg, dies zu erreichen? –

Verwandte Themen