OAuth2 – Account verknüpfen für sichere API-Zugriffe

16.02.2016

Mit OAuth2 ist es möglich, über einen definierten Ablauf einem Client die Berechtigung auf eigene Ressourcen zu gewähren. Klassischerweise kennt man das unter der Funktion „Account verknüpfen“.

Beispiel: ich nutze das Tool calvaDrive zur Dateikommunikation, in welchem ich einen Account besitze und meine Dateien verwalte. Nun möchte ich einem externen Dienst den Zugriff auf meine Dateien zu gewähren. Ein solcher Dienst könnte beispielsweise eine Nachricht versenden, wenn eine meiner Dateien heruntergeladen wurde. Ein Dienst dieser Art könnte beispielsweise IFTTT (www.ifttt.com) sein.

Vereinfacht dargestellt könnte ich mit OAuth2 die Verknüpfung folgendermaßen herstellen (aktuell allerdings für calvaDrive noch nicht implementiert):

  1. Ich logge mich im externen Dienst ein und wähle eine Funktion „mit calvaDrive-Account verknüpfen“
  2. ich werde auf calvaDrive weitergeleitet, wo ich meine Logindaten eingebe
  3. Nun kann ich den Zugriff entweder gewähren oder verhindern
  4. Der externe Dienst bekommt einen Access-Token, mit dem er zukünftig Zugriff auf die geschützte API von calvaDrive bekommt. Zusätzlich erhält er einen Refresh-Token, um den zeitlich begrenzten Access-Token zu erneuern.

Der externe Dienst muss diese Tokens nun sicher abspeichern. Wer den Access-Token bekommt, erhält Zugriff auf die API-Funktionen. Da der Token nur für mich ausgestellt wird, muss der nutzende Dienst den Token in meinem Benutzerkontext abspeichern.

Wie kann so etwas aussehen? Es sind zwei Fälle denkbar:

  1. der Dienst ist webbasiert und ich habe dort einen Account
  2. es handelt sich um eine lokale Anwendung auf meinem Rechner, ich habe nicht zwingend einen Account

Im ersten Fall muss der Token auf dem Server zu meinem Account abgelegt werden. Im zweiten Fall kann der Token auch auf meiner lokalen Festplatte abgelegt werden.

Der Token hat eine begrenzte Lebensdauer, die klassischerweise recht kurz gehalten wird. Nach Ablauf kann der externe Dienst mit Hilfe seines Refresh-Tokens den Zugriff erneut anfragen. Der Benutzer selbst muss hierzu nicht anwesend sein und auch nicht erneut seine Logindaten eingeben.

Für mich scheint der sicherheitstechnsiche Knackpunkt darin zu liegen, die Tokens sicher abzulegen und nur in gesicherten Verbindungen zu übertragen. Bisher ist mir kein Fall bekannt, in dem ein solcher Token von Dritten kompromittiert wurde.

Welche Erfahrungen habt ihr gemacht? Wie sicher ist OAuth2 in der Praxis?

OAuth2 schematischer Ablauf
Schematische Beschreibung von OAuth2 am Beispiel von calvaDrive

 

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*