OAuth2 aus Anwendersicht

Till Born

Von: Till Born
Datum: 31.08.2017

Im Folgenden wird OAuth2 aus der Sicht eines Anwenders beschrieben. Dabei werden technische Details weggelassen und nur beschrieben, wie sich das System „von außen“ verhält. Hierfür wird ein fiktives Szenario dargestellt. Dieses Szenario endet nach Durchführung von OAuth2. Das Szenario wird ausführlichst durch Bilder erklärt, damit alle Schritte auch zukünftig nachverfolgt werden können.

Hobbyprogrammierer Max hat eine Notizen-App geschrieben und diese bisher nicht veröffentlicht. Er benutzt diese täglich und findet, dass andere Gefallen an der App finden könnten. Er entscheidet sich die App als Open-Source Projekt zu veröffentlichen. Max hatte bisher keinen Kontakt mit Bitbucket.

Max besucht bitbucket.org mit seinem Browser, möchte aber kein neues Benutzerkonto erstellen. Er hat hierfür mehrere Gründe. Einer davon ist, dass er sich kein weiteres Passwort merken möchte. Er klickt auf Get Started und findet die Bitbucket eigene Registrierung vor. Er navigiert zurück auf die Startseite und klickt stattdessen auf Log in.

Bitbucket Startseite

Abbildung : Startseite von Bitbucket

(1) Im Bitbucket Anmeldebildschirm hat er die Option sich mit einem Google Konto anzumelden. Ein Google Konto besitzt Max bereits und somit wählt er diese Option mit einem Klick auf Log in with Google aus.

Bitbucket Anmeldebildschirm

Abbildung : Anmeldebildschirm von Bitbucket

(2a) Es erscheint der Google-typische Login. Max überprüft die Adresszeile des Browsers und sieht, dass es sich um eine sichere Verbindung zu Google handelt. Er gibt seine Email-Adresse ein und bestätigt.

Google Login

Abbildung : Email Eingabemaske beim Google Login

(2b) Im darauf folgenden Bildschirm muss Max sein Google Passwort eingeben.

Google Login

Abbildung : Passwort Eingabemaske beim Google Login

(3) Nach der Eingabe der Benutzerdaten wird eine Liste von Berechtigungen angezeigt. Bitbucket möchte Zugriff auf Daten von Max haben. Hierbei soll er zur Freigabe von Email-Adresse und Profildaten zustimmen. Max akzeptiert.

Zustimmungsseite

Abbildung : Bitbucket möchte Zugriff auf persönliche Daten

(4) Zuletzt kann sich Max einen Benutzernamen für Bitbucket aussuchen.

Bitbucket Benutzername

Abbildung : Benutzernamen bei Bitbucket auswählen

Hiermit endet der Registrierungsvorgang und somit auch OAuth2 aus Anwendersicht. Im Folgenden werden die einzelnen Phasen beschrieben, die Max mit OAuth2 durchläuft.

OAuth2 Beschreibung

Im vorherigen Kapitel wurde OAuth2 in Aktion gezeigt, so wie es ein Anwender sieht. Dieses Kapitel geht tiefer in die Materie, lässt dabei aber technische Details weg: Sie erfahren hier nicht, welche Methode eine HTTP Anfrage mit welchen Parametern haben muss und wann Sie diese ausführen müssen. Es geht hierbei um einen High-Level Überblick des OAuth2 Vorgangs. Eine technische Beschreibung eines OAuth2 Ablaufs folgt in Zukunft in einem weiteren Artikel.

Im vorherigen Kapitel wurden einzelne Textabschnitte mit Nummerierungen versehen. Diese Abschnitte beschreiben einzelne Schritte des gezeigten OAuth2 Vorgangs. Über die Nummerierungen werden die einzelnen Schritte referenziert. Um das Szenario zu konkretisieren werden einige Hintergrundinformationen benötigt. Diese werden im Folgenden dargestellt.

OAuth2 Allgemein

OAuth2 ist ein Autorisierungsframework mit dem ein Benutzer, mit Hilfe eines Autorisierungsservice, einer dritten Partei Zugriff auf eine Ressource geben kann.

Hierfür hat Max zuvor ein Benutzerkonto bei Google erstellt indem er eine Email-Adresse und ein Passwort hinterlegt hat. Damit kann Google im Falle eines Logins bestätigen, dass es sich bei korrekter Anmeldung mit diesen Daten beim Anmelder um Max handelt. Google kann also die (virtuelle) Identität von Max nachweisen (Diebstahl der Anmeldedaten ermöglicht hierbei also Identitätsdiebstahl).

Bitbucket hat OAuth2 als Anmeldemöglichkeit eingebaut. Im speziellen ermöglicht Bitbucket die Anmeldung über Google, d.h. Bitbucket vertraut darauf, dass Google wahrheitsgemäß eine Identität nachweisen kann. Damit Bitbucket den Service des Identitätsnachweises von Google nutzen kann muss eine Registrierung von Bitbucket bei Google vorliegen durch die Bitbucket eine ID und Passwort erhält. Mit diesen Daten kann Bitbucket dann nach dem Identitätsnachweis fragen. Hierdurch entsteht ein Vertrauensverhältnis zwischen Google und Bitbucket.

Für die Anmeldung bei Bitbucket wurde ein bestimmter OAuth2 Ablauf angewendet, der Authorization Code Ablauf. Bei diesem Ablauf gewährt ein Benutzer einer dritten Partei Zugriff auf seine Ressourcen. Hierfür muss der Benutzer seine Anmeldedaten aber nicht an die dritte Partei übergeben. Dies wäre ein Sicherheitsrisiko, da Mithilfe der Anmeldedaten die Identität bestätigt wird und die dritte Partei sich mit den Anmeldedaten als der Benutzer ausgeben kann. Deswegen wird die Authentifizierung nur zwischen dem Benutzer und dem Autorisierungsservice durchgeführt. Auf erfolgreiche Authentifizierung des Benutzers wird der dritten Partei ein Code überstellt. Mit diesem Code kann die dritte Partei dann ein Passwort erfragen, das Access Token, mit dessen Hilfe die dritte Partei auf die Ressource des Benutzers zugreifen kann.

OAuth 2 stellt weitere Abläufe zu Verfügung, u.a. auch einen Ablauf bei dem die Anmeldedaten an die dritte Partei übergeben werden. Hier ist abzuwägen, ob ein Vertrauensverhältnis zwischen dem Benutzer und der dritten Partei vorliegt um eine Übergabe der Anmeldedaten zu rechtfertigen. Andere Abläufe werden hier nicht weiter behandelt.

Registrierung und Anmeldung bei Bitbucket

Die zuvor beschriebene allgemeine Darstellung von OAuth 2 wird im Folgenden konkret auf das Beispiel von Max und Bitbucket angewendet (Dabei wird das Anfangsszenario referenziert). Hierbei muss darauf hingedeutet werden, welche Bedeutung die Autorisierung von Max für Bitbucket beinhaltet: Für welche Ressource autorisiert Max Bitbucket? Für seine Profildaten bei Google! Bitbucket autorisiert sich selbst, nach erfolgreicher Identifizierung von Max mit OAuth 2, auf Max‘ Ressourcen bei Bitbucket zuzugreifen.

Registrierung

  1. Max befindet sich auf dem Anmeldebildschirm von Bitbucket. Als er auf die Anmeldeseite navigiert ist stellte Bitbucket fest, dass Max nicht angemeldet ist und somit nicht auf den Bitbucket Service zugreifen kann. Max hat noch kein Benutzerkonto und betätigt den Log in with Google Button. Hierdurch beginnt der OAuth 2 Vorgang. Bitbucket weiß an dieser Stelle noch nicht, dass Max der Aufrufer war.

    Durch den Klick auf den Button sendet Bitbucket Max zum Google Autorisierungsservice. Hierbei werden zusätzliche Informationen angehangen, z.B. welche Zugriffsrechte Bitbucket haben möchte (in diesem Fall die Profildaten von Max) und wie der Code zurück zu Bitbucket zu senden ist. Deutlich zu machen ist hierbei, dass Max die Webseite von Bitbucket tatsächlich verlässt. Dies wäre durch Max zu überprüfen, z.B. indem er sich das Zertifikat der Webseite anschaut. Würde Max die Seite von Bitbucket nicht verlassen und würde Bitbucket einen Google Login vorspielen, so wäre dies im Bereich des Phishings.

  2. (2) In diesem Schritt müssen 2 Fälle betrachtet werden: Max ist noch nicht bei Google eingeloggt und Max ist bereits bei Google eingeloggt. Ist Max bereits eingeloggt, so wird Schritt 2 übersprungen.

    Auf der Google Seite angelangt wird Max durch den (bekannten) Login Dialog von Google begrüßt. Er gibt seine Anmeldedaten ein und sendet diese ab. Google überprüft nun im Hintergrund die Identität, die durch die Anmeldedaten bereitgestellt wird.

  3. (3) Bei erfolgreicher Identitätsprüfung wird Max auf den Zustimmungsbildschirm weitergeleitet. Hier werden die von Bitbucket geforderten Zugriffsrechte aufgeführt. Max kann diese im Ganzen ablehnen oder zustimmen. Bei Zustimmung generiert Google einen Autorisierungscode. Dieser Code stellt die Autorisierung dar im Namen von Max ein Passwort zu erhalten, mit dem auf Ressourcen von Max zugegriffen werden kann. Auf welche Ressourcen Zugriff erteilt wird, wurde über den Zustimmungsbildschirm festgelegt. Der Code selbst ist eine zufällige Zeichenkette und kann nur noch von Google und Max selbst (mit dem nötigen technischen Wissen) zu Max zugeordnet werden. Hierbei geht also die Authentifizierung verloren und es bleibt lediglich die Autorisierung.

  4. (4) Max wird zurück zu Bitbucket geleitet. Hierbei wurde u.a. der Code mitgesendet. Bitbucket verarbeitet den Code nun im Hintergrund und erlangt das Access Token von Google. Mit dem Access Token kann Bitbucket nun auf die spezifizierten Ressourcen zugreifen. Streng genommen endet die OAuth 2 Spezifikation hier und Bitbucket könnte dem Access Token keinen Benutzer zuordnen. Google bietet allerdings einen Benutzerdaten Endpunkt an mit dessen Hilfe mit einem Access Token an Profildaten zum authentifizierten Benutzer gelangt werden kann. Bitbucket führt also einen Profilaufruf durch, hängt das Access Token an und erhält als Antwort das Profil von Max. Mit den Informationen aus dem Profil kann Bitbucket das Access Token nun Max zuordnen.

    Sobald die Hintergrundarbeit abgeschlossen ist wird die Bitbucket Seite angezeigt, bei der Max seinen Bitbucket Benutzernamen wählen und die Bitbucket Registrierung abschließen kann.

Anmeldung

Die Anmeldung unterscheidet sich nur durch das Wegfallen des Registrierungsteils von Bitbucket selbst von der Registrierung. OAuth2 wird genauso wie bei der Registrierung durchgeführt. Kleinere Unterschiede können dadurch entstehen, dass sowohl Google als auch Bitbucket bereits mit Max in Kontakt waren (und Sessions erzeugt haben) und folglich einige Schritte schneller ausgeführt werden können, z.B. ist Max bereits bei Google eingeloggt und muss sich nicht erneut einloggen.

Fazit

Mit OAuth 2 wird delegierte Autorisierung ermöglicht. Ein Benutzer kann über einen Autorisierungsservice einer dritten Partei Zugriff auf eine Ressource ermöglichen. Vorteile hierbei sind, dass die dritte Partei keinen Zugriff auf die Anmeldedaten des Benutzers hat. Zusätzlich kann der Benutzer den Zugriff für die dritte Partei über den Autorisierungsservice zu jeder Zeit widerrufen. Weiterhin braucht der Benutzer nur noch ein Benutzerkonto (das beim Autorisierungsservice) um sich bei allen OAuth 2 kompatiblen Diensten anzumelden.

Am Beispiel von Max/Bitbucket/Google wurde der OAuth 2 Authorization Code Ablauf dargestellt. Hierbei konnte Max seine Profildaten für Bitbucket über Google bereitstellen um die Registrierung zu erleichtern. Beim erneuten Anmelden kann Bitbucket das Access Token wieder zu Max zuordnen.

In diesem Artikel wurden technische Details nahezu vollständig vernachlässigt. Hierfür folgt in Zukunft ein weiterer Artikel in dem OAuth 2 im Detail betrachtet wird.