1. Einführung (Introduction)
Im traditionellen Client-Server-Authentifizierungsmodell fordert der Client (Client) eine zugriffsbeschränkte Ressource (geschützte Ressource, Protected Resource) auf dem Server an, indem er sich mit den Anmeldeinformationen des Ressourcenbesitzers (Resource Owner) beim Server authentifiziert. Um Drittanbieteranwendungen Zugriff auf eingeschränkte Ressourcen zu gewähren, muss der Ressourcenbesitzer seine Anmeldeinformationen mit dem Drittanbieter teilen. Dies führt zu mehreren Problemen und Einschränkungen.
OAuth (OAuth) behebt diese Probleme, indem es eine Autorisierungsschicht (Authorization Layer) einführt und die Rolle des Clients von der des Ressourcenbesitzers trennt. In OAuth fordert der Client Zugriff auf Ressourcen an, die vom Ressourcenbesitzer kontrolliert und vom Ressourcenserver (Resource Server) gehostet werden, und erhält einen anderen Satz von Anmeldeinformationen als die des Ressourcenbesitzers.
Anstatt die Anmeldeinformationen des Ressourcenbesitzers zu verwenden, um auf geschützte Ressourcen zuzugreifen, erhält der Client ein Zugangstoken (Access Token) – eine Zeichenfolge, die einen bestimmten Bereich (Scope), eine Lebensdauer und andere Zugriffseigenschaften darstellt. Zugangstokens werden von einem Autorisierungsserver (Authorization Server) mit der Genehmigung des Ressourcenbesitzers an Drittanbieter-Clients ausgegeben. Der Client verwendet das Zugangstoken, um auf die vom Ressourcenserver gehosteten geschützten Ressourcen zuzugreifen.
Diese Spezifikation ist für die Verwendung mit HTTP (<RFC2616>) konzipiert. Die Verwendung von OAuth über andere Protokolle als HTTP liegt außerhalb des Umfangs dieser Spezifikation.
1.1. Rollen (Roles)
OAuth definiert vier Rollen.
Ressourcenbesitzer (Resource Owner)
Eine Entität, die in der Lage ist, Zugriff auf eine geschützte Ressource zu gewähren. Wenn der Ressourcenbesitzer eine Person ist, wird er als Endbenutzer (End-User) bezeichnet.
Ressourcenserver (Resource Server)
Der Server, der die geschützten Ressourcen hostet und in der Lage ist, Anfragen für geschützte Ressourcen unter Verwendung von Zugangstokens zu akzeptieren und zu beantworten.
Client
Eine Anwendung, die im Namen des Ressourcenbesitzers und mit dessen Autorisierung Anfragen für geschützte Ressourcen stellt. Der Begriff „Client" impliziert keine bestimmten Implementierungsmerkmale (z. B. ob die Anwendung auf einem Server, einem Desktop oder anderen Geräten ausgeführt wird).
Autorisierungsserver (Authorization Server)
Der Server, der dem Client Zugangstokens ausstellt, nachdem er den Ressourcenbesitzer erfolgreich authentifiziert und die Autorisierung erhalten hat.
Die Interaktion zwischen dem Autorisierungsserver und dem Ressourcenserver liegt außerhalb des Umfangs dieser Spezifikation. Der Autorisierungsserver kann derselbe Server wie der Ressourcenserver sein oder eine separate Entität. Ein einzelner Autorisierungsserver kann (MAY) Zugangstokens ausgeben, die von mehreren Ressourcenservern akzeptiert werden.
1.2. Protokollablauf (Protocol Flow)
Der abstrakte OAuth 2.0-Ablauf zeigt die Interaktionen zwischen den vier Rollen und umfasst die folgenden Schritte.
+--------+ +---------------+
| |--(A)- Authorization Request ->| Resource |
| | | Owner |
| |<-(B)-- Authorization Grant ---| |
| | +---------------+
| |
| | +---------------+
| |--(C)-- Authorization Grant -->| Authorization |
| Client | | Server |
| |<-(D)----- Access Token -------| |
| | +---------------+
| |
| | +---------------+
| |--(E)----- Access Token ------>| Resource |
| | | Server |
| |<-(F)--- Protected Resource ---| |
+--------+ +---------------+
(A) Der Client fordert die Autorisierung vom Ressourcenbesitzer an.
(B) Der Client erhält eine Autorisierung (Authorization Grant).
(C) Der Client fordert ein Zugangstoken an, indem er sich beim Autorisierungsserver authentifiziert und die Autorisierung vorlegt.
(D) Der Autorisierungsserver authentifiziert den Client, validiert die Autorisierung und stellt ein Zugangstoken aus.
(E) Der Client fordert die geschützte Ressource vom Ressourcenserver an und präsentiert das Zugangstoken.
(F) Der Ressourcenserver validiert das Zugangstoken und bearbeitet die Anfrage, wenn sie gültig ist.
1.3. Autorisierung (Authorization Grant)
Eine Autorisierung (Authorization Grant) ist eine Anmeldeinformation, die die Autorisierung des Ressourcenbesitzers darstellt und vom Client verwendet wird, um ein Zugangstoken zu erhalten. Diese Spezifikation definiert vier Autorisierungstypen (Autorisierungscode, implizit, Ressourcenbesitzer-Passwort-Anmeldeinformationen und Client-Anmeldeinformationen) sowie einen Erweiterungsmechanismus zur Definition zusätzlicher Typen.
1.3.1. Autorisierungscode (Authorization Code)
Der Autorisierungscode (Authorization Code) wird durch Verwendung des Autorisierungsservers als Vermittler zwischen dem Client und dem Ressourcenbesitzer erhalten.
1.3.2. Implizit (Implicit)
Die implizite Autorisierung (Implicit Grant) ist eine vereinfachte Version des Autorisierungscodes, optimiert für Clients, die in einem Browser mit einer Skriptsprache wie JavaScript implementiert sind.
1.3.3. Ressourcenbesitzer-Passwort-Anmeldeinformationen (Resource Owner Password Credentials)
Die Ressourcenbesitzer-Passwort-Anmeldeinformationen (Benutzername und Passwort) können direkt als Autorisierung verwendet werden, um ein Zugangstoken zu erhalten.
1.3.4. Client-Anmeldeinformationen (Client Credentials)
Die Client-Anmeldeinformationen (Client Credentials) können als Autorisierung verwendet werden, wenn der Bereich der Autorisierung auf geschützte Ressourcen beschränkt ist, die unter der Kontrolle des Clients stehen.
1.4. Zugangstoken (Access Token)
Ein Zugangstoken (Access Token) ist eine Anmeldeinformation, die zum Zugriff auf geschützte Ressourcen verwendet wird. Es stellt eine Zeichenfolge dar, die den Bereich, die Lebensdauer und andere spezifische Zugriffseigenschaften charakterisiert, die vom Ressourcenbesitzer autorisiert und vom Ressourcenserver und Autorisierungsserver durchgesetzt werden.
1.5. Aktualisierungstoken (Refresh Token)
Ein Aktualisierungstoken (Refresh Token) ist eine Anmeldeinformation, die zum Erhalten von Zugangstokens verwendet wird. Aktualisierungstokens werden vom Autorisierungsserver an den Client ausgegeben und werden verwendet, um ein neues Zugangstoken zu erhalten, wenn das aktuelle Zugangstoken ungültig wird oder abläuft.