2015-08-14 6 views
7

Ich bin die Umsetzung OAuth 2.0 mit JWT in meiner Anwendung und habe Probleme zu entscheiden, was wie meinen aud Anspruch einzustellen. Ein Benutzer wird sich über meinen Authentifizierungsserver bei meinem Client anmelden, um Zugriff auf meinen API (Ressourcen) -Server zu erhalten. Ich möchte, dass meine Token nur für die Verwendung mit einem bestimmten Client und einer bestimmten API gültig sind.Client-ID oder mehr Audienzen In JSON Web Token

authentication flow

Wenn in meiner Client anmelden, schließe ich it't client_id in der Anfrage, sondern in mostimplementationsI'vefound, die aud an diese client_id gesetzt. Ich lehne ein Kunde audience_id Feld in meiner Login-Anfrage hin mit und dann die aud auf ein Array der client_id in der Token-Einstellung und die audience_id, aber die fühlt wie es bedeutet nur, dass das Token sowohl für derjenigediejenigedasjenige audiences gültig ist , was ich denken läßt, ich soll nur einen benutzerdefinierten Anspruch hinzufügen client genannt ausdrücklich zu sagen, dass dieses Token für einen bestimmten Client erstellt wurde.

Ich habe nicht über jede Implementierungen online geschaltet werden, die sowohl eine client_id und audience_id (n) in einer OAuth Login-Anfrage enthalten, noch sehe ich einen reservierten Anspruch für clientin the spec.

Fehle ich hier etwas?

Was ist die beste Vorgehensweise, um speziell einen anderen client_id und audience_id in einem JWT anzugeben?

Antwort

7

Die Zielgruppe des JWT ist der Ressourcenserver, da dort das Token verarbeitet, d. H. Verifiziert, inspiziert und bearbeitet wird. Von RFC 7519, https://tools.ietf.org/html/rfc7519#section-4.1.3:

Der "Aud" (Publikum) Anspruch identifiziert den Empfänger, dass die JWT
vorgesehen für ist. Jedes Haupt sollte die JWT Prozess muss
identifiziert mich mit einem Wert im Publikum Anspruch.
[...]
Die Interpretation Zuschauerwerte ist in der Regel anwendungsspezifisch.
[...]

So beste Praxis ist, dass aud Resource Server identifizieren soll.

Der Client ist nur der Moderator des Token und es ist die beste Vorgehensweise (d. H. In OpenID Connect und einigen neuen OAuth 2.0-Erweiterungen), den azp (Authorized Presenter) für diesen Anspruch zu verwenden. Von http://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken:

azp
OPTIONAL. Autorisierte Partei - die Partei, für die der ID-Token ausgegeben wurde. Falls vorhanden, MUSS es die OAuth 2.0-Client-ID dieser Partei enthalten. Dieser Anspruch ist nur erforderlich, wenn die ID-Token einen einzigen Publikum Wert haben und dass Publikum ist anders als die autorisierten Partei.
[...]]

So ist Best Practice, dass azp den Client identifiziert.

+0

und dann eine 'audience_id' in die anfängliche Anmeldeanforderung vom Client einbeziehen, die angibt, auf welche Zielgruppe sie zugreifen möchten? – Greg

+1

Diese Beziehung kann indirekt mit dem 'Scope'-Konzept (und Anforderungsparameter) erstellt werden; Dies ermöglicht mehr Flexibilität als nur eine Eins-zu-eins-Zuordnung zwischen Bereich und Ressourcenserver; Im Allgemeinen modelliert ein Bereich eine Zugriffsberechtigung: ein Bereich kann einem Ressourcenserver zugeordnet sein, kann aber auch einer bestimmten Ressource zugeordnet sein, die unter anderem von einem Ressourcenserver oder einer Sammlung von Ressourcenservern geschützt ist –