Frage OAuth v2-Kommunikation zwischen Authentifizierung und Ressourcenserver


Ich habe Probleme zu verstehen, wie OAUTH-v2 funktioniert.

Das OAuth Version 2 Spezifikation liest:

  1. Zugriff auf geschützte Ressourcen

    Der Client greift auf geschützt zu   Ressourcen durch Präsentation des Zugangs
      Token zum Ressourcenserver. Das   Ressourcenserver MUSS das validieren
      Zugriffs-Token und stellen Sie sicher, dass dies nicht der Fall ist   abgelaufen und dass sein Anwendungsbereich umfasst
      die angeforderte Ressource. Die Methoden   verwendet von dem Ressourcenserver zu
      validiere das Zugriffs-Token (sowie   etwaige Fehlerreaktionen sind) über den   Umfang dieser Spezifikation, aber   allgemein eine Interaktion beinhalten oder   Koordination zwischen der Ressource   Server und die Autorisierung
      Server
    .

Wie funktioniert diese Interaktion zwischen Ressourcenserver und Autorisierungsserver in der Praxis?

  • Wie funktioniert der Ressourcenserver? Bestimmen Sie, dass ein Access-Token es erhalten ist gültig?
  • Wie funktioniert das? Ressourcenserver extrahiert das erlaubte Bereich von dem Token, um zu sehen, ob Zugang zu einer bestimmten Ressource gewährt werden sollte? Ist das Scope im Zugriffstoken codiert oder muss der Ressourcenserver zuerst den Autorisierungsserver kontaktieren?
  • Wie wird das Vertrauen zwischen dem Ressourcenserver und dem Autorisierungsserver hergestellt?

Zugriff auf Tokenattribute und die   Methoden für den Zugriff auf protected   Ressourcen sind über den Rahmen hinaus   Spezifikation und sind definiert durch   Begleiter Spezifikationen.

Kann jemand Beispiele für Token-Attribute geben?


76
2018-06-06 16:28


Ursprung


Antworten:


Der Grund, warum dies für die Spezifikation nicht in Betracht kommt, ist die breite Palette von Möglichkeiten, um diese Verbindung zwischen den beiden Entitäten herzustellen. Die Hauptfrage ist, wie komplex Ihre Bereitstellung ist.

Haben Sie beispielsweise einen Server, der die Authentifizierung und den Zugriff verwaltet, und eine Reihe von eigenständigen Diensten, deren eigene Server die API-Aufrufe bedienen? Oder haben Sie nur eine Box mit einem Webserver, der sowohl die Authentifizierung / Autorisierung als auch die API-Aufrufe behandelt?

Im Fall einer einzelnen Box wird nicht viel benötigt, da die Entity, die Token ausgibt, dieselbe ist wie diejenige, die sie validiert. Sie können Token implementieren, um einen Schlüssel der Datenbanktabelle zu verwenden, und den Datensatz in der Datenbank (oder dem Speichercache) bei jeder Anforderung suchen oder den Bereich, die Benutzer-ID und andere Informationen direkt in das Token codieren und sie mit einer symmetrischen oder asymmetrischen Verschlüsselung verschlüsseln Algorithmus.

Im Umgang mit einer verteilten Umgebung wird es etwas komplexer, aber nicht viel. Sie geben weiterhin Tokens auf dem Autorisierungsserver aus, aber der Ressourcenserver benötigt eine Möglichkeit, diese zu validieren. Dies kann geschehen, indem dem Ressourcenserver eine interne API zur Verfügung gestellt wird, um den Autorisierungsserver aufzufordern, das Token aufzulösen (was in einer lokalen Umgebung schnell sein kann), oder beide können ein öffentliches / privates Schlüsselpaar oder symmetrisches Geheimnis herstellen und verwenden Sie das, um alles zu verschlüsseln, was der Ressourcenserver in das Token benötigt.

Selbstständige Tokens sind länger, bieten aber eine viel bessere Leistung pro Anfrage. Sie haben jedoch einen Preis - Sie können sie nicht wirklich widerrufen, solange sie noch gültig sind (nicht abgelaufen). Aus diesem Grund sollten eigenständige Tokens sehr kurzlebig sein (was auch immer für Sie akzeptabel ist, um den Zugriff nach dem Widerruf offen zu lassen - z. B. verwenden viele Sites eine Stunde), wobei ein Refresh-Token für ein Jahr oder mehr gut ist, um neue Tokens zu erhalten.


77
2018-06-20 18:39



Ein Beispiel für eine Ressourcen-zu-Autorisierungs-Server-API ist diejenige bei Google-Entwickler-Website.
Es spezifiziert zwar nicht das Format des Zugriffstokens, aber die Antwort scheint ziemlich universell nützlich zu sein.


4
2017-12-20 07:59