Gemäß RFC6750 - Das OAuth 2.0-Autorisierungsframework: Verwendung von Bearer-Token lautet das Bearer-Token:
Ein Sicherheitstoken mit dem Eigentum, dass jede Partei, die den Token besitzt (ein "Inhaber"), den Token auf jede Weise verwenden kann, die jede andere Partei, die ihn besitzt, kann.
Für mich ist diese Definition vage und ich kann keine Spezifikation finden.
- Angenommen, ich implementiere einen Autorisierungsanbieter. Kann ich eine beliebige Zeichenfolge für das Inhaber-Token angeben?
- Kann es eine zufällige Zeichenfolge sein?
- Muss es sich um eine Base64-Codierung einiger Attribute handeln?
Sollte es gehasht werden? - Und muss der Dienstanbieter den Autorisierungsanbieter abfragen, um dieses Token zu validieren?
Vielen Dank für jeden Hinweis.
oauth
bearer-token
Alex Beaupré
quelle
quelle
Antworten:
Das Inhaber-Token wird vom Authentifizierungsserver für Sie erstellt. Wenn ein Benutzer Ihre Anwendung (Ihren Client) authentifiziert, geht der Authentifizierungsserver und generiert für Sie ein Token. Inhabertoken sind die vorherrschende Art von Zugriffstoken, die mit OAuth 2.0 verwendet werden. Ein Inhaber-Token sagt im Grunde "Gib dem Träger dieses Token Zugriff".
Das Bearer Token ist normalerweise eine Art undurchsichtiger Wert, der vom Authentifizierungsserver erstellt wird. Es ist nicht zufällig; Es wird basierend auf dem Benutzer erstellt, der Ihnen Zugriff gewährt, und dem Client, auf den Ihre Anwendung Zugriff erhält.
Um beispielsweise auf eine API zugreifen zu können, müssen Sie ein Zugriffstoken verwenden. Zugangstoken sind von kurzer Dauer (ca. eine Stunde). Sie verwenden das Inhaber-Token, um ein neues Zugriffstoken zu erhalten. Um ein Zugriffstoken zu erhalten, senden Sie dem Authentifizierungsserver dieses Inhaber-Token zusammen mit Ihrer Client-ID. Auf diese Weise weiß der Server, dass die Anwendung, die das Inhaber-Token verwendet, dieselbe Anwendung ist, für die das Träger-Token erstellt wurde. Beispiel: Ich kann nicht einfach ein für Ihre Anwendung erstelltes Inhaber-Token verwenden und es mit meiner Anwendung verwenden. Es funktioniert nicht, da es nicht für mich generiert wurde.
Das Google Refresh-Token sieht ungefähr so aus: 1 / mZ1edKKACtPAb7zGlwSzvs72PvhAbGmB8K1ZrGxpcNM
kopiert aus dem Kommentar: Ich glaube, es gibt keine Einschränkungen für die von Ihnen gelieferten Inhaber-Token. Ich kann mir nur vorstellen, dass es schön ist, mehr als eine zuzulassen. Beispielsweise kann ein Benutzer die Anwendung bis zu 30 Mal authentifizieren, und die alten Inhaber-Token funktionieren weiterhin. Oh, und wenn man 6 Monate lang nicht benutzt wurde, würde ich es von Ihrem System entfernen. Es ist Ihr Authentifizierungsserver, der sie generieren und validieren muss, sodass es an Ihnen liegt, wie sie formatiert werden.
Aktualisieren:
Im Authorization-Header jeder Inline-Action-HTTP-Anforderung wird ein Bearer-Token festgelegt. Beispielsweise:
Die Zeichenfolge
"AbCdEf123456"
im obigen Beispiel ist das Inhaberautorisierungstoken. Dies ist ein kryptografisches Token, das vom Authentifizierungsserver erstellt wird. Alle mit Aktionen gesendeten Inhaber-Token haben das Problemfeld, wobei das Zielgruppenfeld die Absenderdomäne als URL des Formulars https: // angibt. Wenn die E-Mail beispielsweise von [email protected] stammt, lautet die Zielgruppe https://example.com .Wenn Sie Inhaber-Token verwenden, stellen Sie sicher, dass die Anforderung vom Authentifizierungsserver stammt und für die Absenderdomäne bestimmt ist. Wenn das Token nicht überprüft wird, sollte der Dienst auf die Anforderung mit einem HTTP-Antwortcode 401 (nicht autorisiert) antworten.
Bearer Tokens sind Teil des OAuth V2-Standards und werden von vielen APIs weitgehend übernommen.
quelle
Während ich Ihre Frage las, habe ich erfolglos versucht, im Internet zu suchen, wie Bearer-Token verschlüsselt oder signiert sind. Ich denke, Inhaber-Token werden nicht gehasht (möglicherweise teilweise, aber nicht vollständig), da es in diesem Fall nicht möglich ist, sie zu entschlüsseln und Benutzereigenschaften daraus abzurufen.
Ihre Frage scheint jedoch zu versuchen, Antworten auf die Bearer-Token-Funktionalität zu finden:
Also werde ich versuchen zu erklären, wie Bearer-Token und Refresh-Token funktionieren:
Wenn der Benutzer beim Server ein Token anfordert, das Benutzer und Kennwort über SSL sendet, gibt der Server zwei Dinge zurück: ein Zugriffstoken und ein Aktualisierungstoken .
Ein Zugriffstoken ist ein Inhaber-Token, das Sie allen Anforderungsheadern hinzufügen müssen, um als konkreter Benutzer authentifiziert zu werden.
Ein Zugriffstoken ist eine verschlüsselte Zeichenfolge mit allen gewünschten Benutzereigenschaften, Ansprüchen und Rollen. (Sie können überprüfen, ob die Größe eines Tokens zunimmt, wenn Sie weitere Rollen oder Ansprüche hinzufügen.) Sobald der Ressourcenserver ein Zugriffstoken erhält, kann er es entschlüsseln und diese Benutzereigenschaften lesen. Auf diese Weise wird der Benutzer zusammen mit der gesamten Anwendung validiert und gewährt.
Zugriffstoken haben einen kurzen Ablauf (dh 30 Minuten). Wenn Zugriffstoken einen langen Ablauf haben würden, wäre dies ein Problem, da theoretisch keine Möglichkeit besteht, sie zu widerrufen. Stellen Sie sich also einen Benutzer mit einer Rolle = "Admin" vor, die sich in "Benutzer" ändert. Wenn ein Benutzer das alte Token mit der Rolle "Admin" behält, kann er bis zum Ablauf des Tokens mit Administratorrechten darauf zugreifen. Aus diesem Grund haben Zugriffstoken einen kurzen Ablauf.
Es kommt jedoch ein Problem in den Sinn. Wenn ein Zugriffstoken kurz abläuft, müssen wir den Benutzer und das Passwort in jedem kurzen Zeitraum senden. Ist das sicher? Nein, ist es nicht. Wir sollten es vermeiden. In diesem Moment scheinen Token zu aktualisieren, um dieses Problem zu lösen.
Aktualisierungstoken werden in der Datenbank gespeichert und haben einen langen Ablauf (Beispiel: 1 Monat).
Ein Benutzer kann mithilfe eines Aktualisierungstokens, das der Benutzer bei der ersten Anforderung eines Tokens erhalten hat, ein neues Zugriffstoken erhalten (wenn es beispielsweise alle 30 Minuten abläuft). Wenn ein Zugriffstoken abläuft, muss der Client ein Aktualisierungstoken senden. Wenn dieses Aktualisierungstoken in der Datenbank vorhanden ist, gibt der Server ein neues Zugriffstoken und ein weiteres Aktualisierungstoken an den Client zurück (und ersetzt das alte Aktualisierungstoken durch das neue).
Falls ein Benutzerzugriffstoken kompromittiert wurde, muss das Aktualisierungstoken dieses Benutzers aus der Datenbank gelöscht werden. Auf diese Weise ist das Token nur so lange gültig, bis das Zugriffstoken abläuft. Wenn der Hacker versucht, ein neues Zugriffstoken zu erhalten, das das Aktualisierungstoken sendet, wird diese Aktion abgelehnt.
quelle
Inhaber-Token ist eine oder mehrere Wiederholungen von Alphabet, Ziffer, "-", "." , "_", "~", "+", "/" gefolgt von 0 oder mehr "=".
RFC 6750 2.1. Header-Feld für Autorisierungsanforderung (Format ist ABNF (Augmented BNF))
Es sieht aus wie Base64, aber laut Sollte das Token im Header base64-codiert sein? , es ist nicht.
Verweise
quelle