2016-11-15 5 views
3

Wir haben Identity Server für den Zugriff auf unsere internen APIs eingerichtet. Wir haben einen neuen JavaScript-Client, der in einer Anforderung ID- und Zugriffstoken für unsere internen APIs erhalten möchte, sowie ein Zugriffstoken zum Aufrufen von APIs direkt vom externen Identitätsanbieter (in diesem Fall Google). Ich dachte, wenn es möglich wäre, es zu bekommen, könnte ich es als eine Forderung in unserem id_token zurückgeben.Zugriffstoken für externe Provider-APIs in IdentityServer3

Wird dies unterstützt? Ich habe den Antworttyp für den Identity-Provider auf "id_token token" gesetzt, und ich kann sehen, dass das Access-Token an Identity Server zurückgegeben wird, aber ich sehe es nicht im Kontext einer der Benutzer-Service-Methoden.

+0

Wenn Sie "Aufruf von APIs direkt vom externen Identitätsanbieter" sagen, meinen Sie damit, dass Sie Ihre eigenen APIs aufrufen, aber mit einem Token, das Sie bei der Authentifizierung mit Google erhalten haben? Ich würde vorschlagen, einige der Beispiele zu betrachten und ihnen durch zu folgen, die mir geholfen haben, als ich versuchte, dies einzurichten: https://github.com/IdentityServer/IdentityServer3.Samples – Remotec

+0

Dieser spezielle Client muss unsere beiden APIs aufrufen (mit unserem Zugriffstoken) und Google APIs (mit einem Google-Zugriffstoken). Es würde immer mit Google als IDP authentifizieren. Ich habe nichts in den Proben gesehen, um dieses Szenario abzudecken (was ein Hinweis darauf sein kann, dass es nicht möglich/nicht empfehlenswert ist). – lgaud

Antwort

1

und ein Zugriffstoken für APIs direkt von der externen Identity-Provider (in diesem Fall Google)

Normalerweise ist die Verwendung von IdentityServer soll abstrahieren anrufen und Ihre App abzuschirmen, die zu wissen, welche Upstream-Identity-Provider, den der Benutzer verwendet hat. Aber nachdem Sie das gesagt haben, können Sie das Google Access Token zum Anmeldungszeitpunkt bei IdenittyServer erfassen. Eine Idee besteht darin, sie in die Datenbank einzufügen, und dann in der GetProfileData-API des Benutzerdienstes diese in die ausgegebenen Ansprüche an die App zurückzugeben.

+0

Ich habe mich gefragt, wo in der Pipeline ich das Zugriffstoken von Google abfangen könnte - es ist nicht bestanden B. AuthenticateExternalAsync. – lgaud

+0

In der Middleware - sie haben Ereignisse, die ausgelöst werden –

+0

@Igaud Dies ist in der Owin Middleware. Den Quellcode finden Sie hier http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Security.Google/GoogleOAuth2AuthenticationHandler.cs Brock Allen - Wie erfassen wir den Token? Wo könnten wir diesen Wert in IdentityServer erfassen? Ich hoffe, keine Unterklasse des GoogleOAuth2AuthenticationHandler zu erstellen, da dies ein Schmerz wäre! Vielen Dank! –

Verwandte Themen