Der OAuth 2.0 Grant Type „client credential“
In der aktuellen OAuth 2.0 Spezifikation sind verschiedene Grant-Types definiert, um unterschiedliche Anmeldeinformationen, Benutzerdaten und Zugriffsrechte zwischen den beteiligten Partnern anfordern und austauschen zu können. Mit dem OAuth2-Grant „client credential“ steht eine besondere und vereinfachte Zugriffskontrolle für einen Client wie beispielsweise dem Datenspeicherdienst Dropbbox zur Verfügung. Der Unterschied zu den anderen Grant-Typen liegt hier in der Tatsache, dass eine Kunden-Anmeldeinformation nur für den Clientzugriff selbst verwendet wird.
Immer wenn ein Benutzer einen speziellen bzw. gesicherten Clientdienst nutzen möchte, wird er vom Anbieter zur Eingabe seiner Benutzerdaten aufgefordert. Das grundsätzlich bekannte Verfahren über eine gesicherte Anmeldung bei einem Dienst wie Facebook oder Google fällt hierbei komplett weg. Eine Umleitung zu einem Autorisierungsserver ist in diesem ersten Schritt somit nicht nötig. Die Kundenberechtigung ähnelt jedoch sehr stark dem Grant-Typ „authorization“ mit der Ausnahme, dass bei diesem Prozess nur die Kunden-Anmeldeinformationen für die Anforderung eines Zugriffstokens verwendet werden.
Die Autorisierung im Detail
Im Vergleich mit den anderen OAuth2 Grant-Typen werden dem Sicherheitsserver nach einer Benutzerautorisierung nur die Kundendaten für die Benutzeranmeldung übertragen. Der Berechtigungsnachweis nutzt damit ein stark vereinfachtes und schlankes Autorisierungsverfahren. Dieses Verfahren wird in der Regel für die eigenen Clientdienste angewendet, um einen bereits angemeldeten Benutzer auf spezielle oder erweiterte Dienste zugreifen zu lassen. Den Unterschied zum Grant-Typ „authorization“ beschreiben die folgenden beiden Verfahrensweisen:
-
Wenn Sie sich beispielsweise mit Ihrem Google-Konto erstmals bei Dropbox anmelden, werden Sie zu dem Autorisierungsserver von Google umgeleitet und dort auf einen Eingabedialog geführt. Dort können Sie sich mit Benutzername und Kennwort entsprechend authentifizieren. War das Login erfolgreich, so werden Sie auf die Webseite von Dropbox zurückgeleitet und mit einem Zugriffstoken für die Benutzung freigeschaltet.
-
Wenn Sie nun bereits bei Dropbox mit Ihrem Google-Konto angemeldet sind, aber eine spezielle Benutzeraktion in z.B. einem geschützten Bereich von Dropbox ausführen möchten, so wird Sie Dropbox selbst mit einem Benutzerlogin-Dialog begrüßen und damit eine zusätzliche Überprüfung Ihrer Identität durchführen. Erst wenn Sie Ihren Benutzernamen und das Kennwort dort eingeben und bestätigen, wird Dropbox eine Autorisierungsanfrage an Google senden und ein gültiges Zugriffstoken direkt anfragen. Nach Freigabe können Sie die Benutzeraktion sofort ausführen.
Protokoll- und Prozessschritte im Auth-Flow
Das vereinfachte Autorisierungsverfahren mit dem Grant-Typ „client credential“ ist für die „interne“ Identifizierung eines Benutzers besonders gut geeignet. Im Beispiel von Dropbox fragt dieser „direkt“ nach den Anmeldedaten des Benutzers über einen Anmelde- bzw. Freigabedialog. In dieser Authentifizierungs-Sequenz sind folgende Partner beteiligt:
-
Der bereits eingeloggte Benutzer beim Client (hier im Beispiel bei Dropbox), der einen besonderen Zugriff tätigen möchte.
-
Der Client (hier im Beispiel Dropbox selbst), der seinen Benutzern speziell abgesicherte Aktionen oder Zugriffe gewähren kann.
An dieser Stelle ist die Autorisierung für einen beispielhaften gesicherten Dateizugriff in Dropbox vorerst noch ohne eine Abfrage beim Sicherheitsserver realisierbar. Erst nach dem Bestätigen der Anmeldeinformationen wird ein zusätzlicher externer Autorisierungsflow wie folgt eingeleitet:
-
Nach der Eingabe der Benutzer-Anmeldeinformationen formt der Client (hier im Beispiel Dropbox) eine Sicherheitsabfrage für den Autorisierungsserver des Benutzers. Dabei werden in der Regel die Parameter „grant_type“, „client_id“, das „client_secret“ und „scope“ in der Anfrage mit übertragen.
-
Neben den Informationen wie Benutzername und Kennwort fügt Dropbox noch die eigenen Clientinformationen der Anfrage hinzu.
-
Der Autorisierungsserver (hier im Beispiel Google im Rahmen der Benutzeranmeldung) prüft die Angaben des Benutzers und des Clients (hier im Beispiel Dropbox) und stellt nach erfolgreicher Authentifizierung ein gültiges Zugriffstoken aus. Das JSON-Objekt enthält dabei in der Regel die Parameter „token_type“, „expires_in“ und das „access_token“.
-
Das Zugriffstoken wird an Dropbox gesendet und autorisiert den Benutzer damit für den Zugriff auf die gesicherten Dropbox-Dienste.
Komfort mit ausreichender Sicherheit
Bei dem hier gezeigten Beispiel kann der Anbieter Dropbox mit dem Grant-Typ „client credential“ schnell und sicher auf eine vereinfachte Autorisierung seines Benutzers zugreifen. Diese Form der Server-zu-Server-Kommunikation wird immer dann verwendet, wenn der Client (hier im Beispiel Dropbox) selbst der Besitzer einer Ressource oder eines Dienstes ist und keine explizite delegierte Autorisierung durch einen Ressource-Owner (hier im Beispiel Google) nötig ist.
Der vereinfacht gehaltene Benutzer-Autorisierungsprozess benötigt somit keinen zusätzlichen vorherigen Authorization-Request und sorgt bei ausreichender Verschlüsselung auch für entsprechende Sicherheit. An dieser Stelle ist allerdings zu beachten, dass hierbei ein Refresh-Token nicht eingesetzt werden sollte.