2017-02-19 1 views
3

ich zur Zeit eine neue Anwendung basiert auf einer Architektur Microservices erschaffe, mit der Authentifizierung von Identity Server zur Verfügung gestellt 4.Exchange-Referenz Token für JWT - Downstream Microservices Genehmigung

Nach viel Forschung und auch proof of concepts einrichten, I Identity Server muss eingerichtet sein, um die APIs und eine native Anwendung zu schützen, die erfolgreich auf diese Dienste mithilfe von Tokens zugreifen.

Anfänglich wurde dem Client ein Zugriffstoken ausgestellt, mit dem auf die APIs zugegriffen wurde. Ich habe dies jedoch jetzt so geändert, dass Referenztoken verwendet werden. Nun zu dem Problem! Der Ansatz, den ich hier verwenden möchte, ist die Übernahme eines Microservices-Gateways, das ein Referenz-Token erhält und dieses dann in ein JWT für die Aufnahme in Anfragen an die nachgeordneten Microservices umwandelt. Wie kann ich innerhalb des Gateways das eingehende Referenz-Token für ein JWT "austauschen"? Gibt es etwas in Identity Server, das hier helfen kann? Oder muss ich den Introspektionsendpunkt verwenden, das Referenztoken einsenden und die Ansprüche abrufen, um einen JWT innerhalb des Gateway-Service zu erstellen, um den Berechtigungsheader an alle nachgelagerten Services zu übergeben?

Wenn es weitere Informationen gibt, die ich zur Verfügung stellen kann, um das Ziel der Architektur zu verstehen, lassen Sie es mich wissen.

Antwort

3

Dies ist ein guter Anwendungsfall für eine Verlängerung gewähren. Lesen Sie die Dokumentation:

https://identityserver4.readthedocs.io/en/release/topics/extension_grants.html

+0

Danke, das sieht genau so aus, wie ich es brauche. Ich werde auf die Implementierung schauen und die Ergebnisse folgen. Ich habe ziemlich viel Zeit damit verbracht, die Dokumente durchzusehen - nicht sicher, wie ich diesen Teil verpasst habe! –

+0

Ich habe die Erweiterung Grant-Funktionalität hinzugefügt und sicher genug, es gibt mir genau das, was ich brauche. Ich habe einige Fragen über die Übernahme dieses in der Gateway-API, aber ich weiß, dass diese vielleicht nicht Identity Server-spezifisch sind, aber ich denke, dass sie für die erste Frage relevant sind. Da die meisten Downstream-Aufrufe, die das Gateway durchführt, den Delegations-JWT zur Autorisierung benötigen, suche ich nach dem saubersten Weg, den JWT für alle Gateway-Controller verfügbar zu machen. Ich stehe auf eine benutzerdefinierte Middleware, um den Austausch (mit Caching) zu bewältigen - wäre das machbar? –

2

Ich dachte, ich mit einigen Details über meine Implementierung hier folgen würde, falls es nützlich war für jemand anderes ein API Gateway mit Referenz Tokens, mit nachgelagerten Dienstleistungen zu sichern, benötigen ein JWT.

Ich habe eine ASP.Net Core Middleware implementiert, die im API Gateway ausgeführt wird. Die Middleware läuft nach der Identity Server Authentication Middleware und vor der MVC Middleware in der Pipeline. Der Zweck der Middleware besteht darin, das eingehende Referenztoken zu nehmen und dieses mit Identity Server (unter Verwendung von Erweiterungszuweisungen) für eine JWT auszutauschen, die im Autorisierungskopf verwendet werden kann, wenn Aufrufe an die nachgeordneten Microservices getätigt werden.

Die Middleware ist verfügbar unter GitHub und auch als NuGet package. Weitere Details zum Anwendungsfall der Middleware finden Sie in der GitHub ReadMe. Dort finden Sie auch ausführliche Informationen zur Installation und Konfiguration der Middleware, die in der GitHub Wiki verfügbar ist.

Zusätzlich zum Austausch eines Referenz-Tokens für ein Access Token hat die Middleware auch Unterstützung für das Caching integriert, wodurch die Anzahl der Round-Trips zum Identity Server für den Token-Austausch verringert wird.

Wenn jemand die Middleware verwenden möchte und Fragen zur Installation und Konfiguration hat, die nicht in der Dokumentation behandelt werden, fügen Sie ein Problem im GitHub-Repository hinzu, das als Frage gekennzeichnet ist.