2015-04-17 13 views
16

Von dem, was ich sagen kann, the OAuth 2.0 specification ist äußerst vage in Bezug auf was nehmen eine access token sollte bilden:Kann ein OAuth 2.0-Zugriffstoken ein JWT sein?

Das Token die Berechtigungsinformationen selbst enthalten eine Kennung bezeichnen verwendet, um die Genehmigung Informationen abzurufen oder in eine überprüfbare Weise (dh eine Tokenkette, die aus einigen Daten und einer Signatur besteht). Zusätzliche Authentifizierungsanmeldeinformationen, die über den Umfang dieser Spezifikation hinausgehen, können erforderlich sein, damit der Client ein Token verwenden kann.

Das Zugriffstoken stellt eine Abstraktionsschicht bereit und ersetzt verschiedene Berechtigungskonstrukte (z. B. Benutzername und Kennwort) durch ein einzelnes Token, das vom Ressourcenserver verstanden wird. Diese Abstraktion ermöglicht die Ausgabe von Zugriffstoken, die restriktiver sind als die Berechtigungsgewährung, mit der sie abgerufen werden, sowie das Entfernen des Ressourcenservers, um eine Vielzahl von Authentifizierungsmethoden zu verstehen.

Zugriffstoken können verschiedene Formate, Strukturen und Verfahren zur Verwendung (z. B. kryptografische Eigenschaften) basierend auf den Sicherheitsanforderungen des Ressourcenservers haben. Zugriffstokenattribute und die Methoden, die zum Zugriff auf geschützte Ressourcen verwendet werden, liegen außerhalb des Rahmens dieser Spezifikation und sind durch Begleitspezifikationen wie RFC6750 definiert.

(Hervorhebung hinzugefügt)

Die verknüpfte RFC6750 nicht viel weiter Spezifität bieten. Es gibt ein Beispiel der HTTP Antwort, die zeigt:

{ 
     "access_token":"mF_9.B5f-4.1JqM", 
     "token_type":"Bearer", 
     "expires_in":3600, 
     "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA" 
    } 

Dies scheint darauf hinzudeuten, dass die access_token undurchsichtig ASCII-Text sein kann wie ein codiertes JSON Web Token (JWT)

Aus meiner Sicht scheint es, wie JWT-as-access_token hat einige wünschenswerte Eigenschaften:

  • Es ist eine bekannte Spezifikation, mit ziemlich breiten Annahme und Client-Bibliotheken in vielen Sprachen verfügbar.

  • Es ermöglicht die einfache Unterzeichnung und Überprüfung mit geprüften kryptografischen Bibliotheken.

  • Da es zu JSON dekodiert werden kann, würde es uns erlauben, Metadaten und Informationen über das Token in das Token selbst aufzunehmen.

  • Meine Fragen sind: Erstens, ist es zulässig, dass der Zugriffstoken ein JWT ist? Zweitens, wenn es gemäß der Spezifikation zulässig ist, gibt es irgendwelche zusätzlichen Überlegungen, die die Verwendung eines JWT als Zugriffstoken zu einer schlechten Idee machen würden?

    Antwort

    21

    A1: Die Verwendung eines JWT als Zugriffstoken ist mit Sicherheit genau zulässig, da die Spezifikation das Format nicht einschränkt.

    A2: Die Idee hinter der Verwendung eines JWT als Zugriffstoken ist, dass es dann eigenständig sein kann, damit das Ziel das Zugriffstoken überprüfen und den zugehörigen Inhalt verwenden kann, ohne zum Autorisierungsserver zurückkehren zu müssen. Das ist eine großartige Eigenschaft, macht aber den Widerruf schwieriger. Wenn Ihr System also eine Möglichkeit zur sofortigen Sperrung des Zugriffs benötigt, ist ein JWT wahrscheinlich nicht die richtige Wahl für ein Zugriffstoken (obwohl Sie ziemlich weit kommen können, indem Sie die Lebensdauer des JWT reduzieren).

    +2

    Wenn Sie den Zugriff im Falle von etwas katastrophalen widerrufen müssten, könnten Sie nur die Geheimnisse richtig ändern? – theblang

    +0

    Wenn Sie das Geheimnis ändern, werden alle JWT-Token für alle Benutzer widerrufen. Ich denke, es wird schwieriger, ein JWT-Token für einen Benutzer zu sperren, da es nirgends gespeichert wird. – user1870400

    +1

    Keine Änderung des Geheimnisses schiebt das Problem auf die Aktualität des Schlüsselverteilungsmechanismus –

    3

    Solange der Autorisierungsserver und der Ressourcenserver sich darauf einigen, was das Zugriffstoken bedeutet, ist es egal, welchen Inhalt es hat. Der einzige Grund, warum Sie ein Problem haben könnten, wäre, wenn Sie bei der Implementierung dieser beiden Server verschiedene Bibliotheken oder Frameworks verwenden würden.

    Verwandte Themen