Ich arbeite an der Implementierung von OAuth 2.0 JWT access_token auf meinem Authentifizierungsserver. Ich bin mir jedoch nicht sicher, welche Unterschiede zwischen dem JWT- aud
Anspruch und dem client_id
HTTP-Header-Wert bestehen. Sind sie gleich? Wenn nicht, können Sie den Unterschied zwischen den beiden erklären?
Mein Verdacht ist, dass er aud
sich auf den oder die Ressourcenserver client_id
beziehen sollte und sich auf eine der vom Authentifizierungsserver erkannten Clientanwendungen beziehen sollte (z. B. Web-App oder iOS-App).
In meinem aktuellen Fall ist mein Ressourcenserver auch mein Web-App-Client.
aud REQUIRED for session_token. Contains the client_id of the client receiving the assertion.
Der JWT
aud
(Audience) ClaimLaut RFC 7519 :
Der in
aud
der Spezifikation definierte Audience ( ) -Anspruch ist generisch und anwendungsspezifisch. Der Verwendungszweck besteht darin, die beabsichtigten Empfänger des Tokens zu identifizieren. Was ein Empfänger bedeutet, ist anwendungsspezifisch. Ein Zielgruppenwert ist entweder eine Liste von Zeichenfolgen oder eine einzelne Zeichenfolge, wenn nur einaud
Anspruch besteht. Der Ersteller des Tokens erzwingt keineaud
korrekte Validierung. Der Empfänger ist dafür verantwortlich, zu bestimmen, ob das Token verwendet werden soll.Was auch immer der Wert ist, wenn ein Empfänger das JWT validiert und validieren möchte, dass das Token für seine Zwecke verwendet werden soll, MUSS er bestimmen, welcher Wert
aud
sich selbst identifiziert, und das Token sollte nur validieren, wenn die deklarierte ID des Empfängers lautet imaud
Anspruch vorhanden. Es spielt keine Rolle, ob dies eine URL oder eine andere anwendungsspezifische Zeichenfolge ist. Wenn sich mein System beispielsweiseaud
mit der Zeichenfolge identifiziertapi3.app.com
, sollte es die JWT nur akzeptieren, wenn deraud
Anspruchapi3.app.com
in seiner Liste der Zielgruppenwerte enthalten ist.Natürlich können sich Empfänger dafür entscheiden, dies zu ignorieren
aud
. Dies ist daher nur dann sinnvoll, wenn ein Empfänger eine positive Bestätigung wünscht, dass das Token speziell für ihn erstellt wurde.Meine Interpretation basierend auf der Spezifikation ist, dass die
aud
Behauptung nützlich ist, um zweckgebundene JWTs zu erstellen, die nur für bestimmte Zwecke gültig sind. Für ein System kann dies bedeuten, dass ein Token für einige Funktionen gültig sein soll, für andere jedoch nicht. Sie können Token ausgeben, die nur auf eine bestimmte "Zielgruppe" beschränkt sind, während Sie dieselben Schlüssel und denselben Validierungsalgorithmus verwenden.Da im typischen Fall ein JWT von einem vertrauenswürdigen Dienst generiert und von anderen vertrauenswürdigen Systemen (Systemen, die keine ungültigen Token verwenden möchten) verwendet wird, müssen diese Systeme lediglich die von ihnen verwendeten Werte koordinieren.
Natürlich
aud
ist es völlig optional und kann ignoriert werden, wenn Ihr Anwendungsfall dies nicht rechtfertigt. Wenn Sie Token nicht auf die Verwendung durch bestimmte Zielgruppen beschränken möchten oder keines Ihrer Systeme dasaud
Token tatsächlich validiert , ist es nutzlos.Beispiel: Zugriffs- oder Aktualisierungstoken
Ein erfundenes (aber einfaches) Beispiel, an das ich denken kann, ist vielleicht, dass wir JWTs für Zugriffs- und Aktualisierungstoken verwenden möchten, ohne separate Verschlüsselungsschlüssel und -algorithmen implementieren zu müssen, sondern lediglich sicherstellen möchten, dass Zugriffstoken nicht als Aktualisierungstoken oder Laster validiert werden -versa.
Durch die Verwendung können
aud
wir beim Erstellen dieser Token einen Anspruchrefresh
auf Aktualisierungstoken und einen Anspruchaccess
auf Zugriffstoken angeben . Wenn eine Anforderung zum Abrufen eines neuen Zugriffstokens von einem Aktualisierungstoken gestellt wird, müssen wir überprüfen, ob das Aktualisierungstoken ein echtes Aktualisierungstoken war. Dieaud
oben beschriebene Validierung zeigt an, ob das Token tatsächlich ein gültiges Aktualisierungstoken war, indem speziell nach einem Anspruch vonrefresh
in gesucht wirdaud
.OAuth Client ID vs. JWT
aud
ClaimDie OAuth-Client-ID ist völlig unabhängig und steht in keinem direkten Zusammenhang mit JWT-
aud
Ansprüchen. Aus der Sicht von OAuth sind die Token undurchsichtige Objekte.Die Anwendung, die diese Token akzeptiert, ist für das Parsen und Überprüfen der Bedeutung dieser Token verantwortlich. Ich sehe nicht viel Wert darin, die OAuth-Client-ID in einem JWT-
aud
Anspruch anzugeben .quelle
Wenn Sie hierher gekommen sind, um OpenID Connect (OIDC) zu suchen: OAuth 2.0! = OIDC
Ich erkenne , dass dies für oauth markiert 2.0 und NICHT OIDC, jedoch gibt es häufig eine Verschmelzung zwischen den zwei Standards , da beide Standards können JWTs und die Verwendung
aud
Anspruch. Und eines (OIDC) ist im Grunde eine Erweiterung des anderen (OAUTH 2.0). (Ich bin über diese Frage gestolpert und habe selbst nach OIDC gesucht.)OAuth 2.0-Zugriffstoken ##
Für OAuth 2.0- Zugriffstoken decken vorhandene Antworten dies ziemlich gut ab. Zusätzlich ist hier ein relevanter Abschnitt aus OAuth 2.0 Framework (RFC 6749)
OIDC-ID-Token ##
OIDC verfügt zusätzlich zu den Zugriffstoken über ID- Token. Die OIDC-Spezifikation bezieht sich ausdrücklich auf die Verwendung des
aud
Anspruchs in ID-Token. ( openid-connect-core-1.0 )Darüber hinaus gibt OIDC den
azp
Anspruch an, der in Verbindung mitaud
when verwendetaud
wird, der mehr als einen Wert hat.quelle
Obwohl dies alt ist, denke ich, dass die Frage auch heute noch gültig ist
Ja, aud sollte sich auf eine Token-konsumierende Partei beziehen. Und client_id bezieht sich auf eine Token erhaltende Partei.
Im OP-Szenario gehören sowohl die Web-App als auch der Ressourcenserver derselben Partei an. Das bedeutet also, dass Kunde und Publikum gleich sind. Es kann jedoch Situationen geben, in denen dies nicht der Fall ist.
Stellen Sie sich ein SPA vor, das eine OAuth-geschützte Ressource verbraucht. In diesem Szenario ist SPA der Client. Geschützte Ressource ist die Zielgruppe des Zugriffstokens.
Dieses zweite Szenario ist interessant. Es gibt einen Arbeitsentwurf mit dem Namen " Ressourcenindikatoren für OAuth 2.0 ", in dem erläutert wird, wo Sie die beabsichtigte Zielgruppe in Ihrer Autorisierungsanfrage definieren können. Das resultierende Token wird also auf die angegebene Zielgruppe beschränkt. Außerdem verwendet Azure OIDC einen ähnlichen Ansatz, bei dem die Registrierung von Ressourcen und die Authentifizierungsanforderung Ressourcenparameter enthalten, um die beabsichtigte Zielgruppe für Zugriffstoken zu definieren. Solche Mechanismen ermöglichen OAuth-Adpotationen eine Trennung zwischen Client und Token-konsumierender (Zielgruppen-) Partei.
quelle