OAuth 2.0 Autorisierung
OAuth 2.0 ist ein Autorisierungs-Framework, das zum De-facto-Standard fuer die Autorisierung des Zugriffs auf geschuetzte Ressourcen geworden ist. Es ermoeglicht Drittanbieteranwendungen den Zugriff auf Benutzerdaten, ohne die Zugangsdaten des Benutzers preiszugeben. Anstatt Passwoerter zu teilen, stellen Dienste Tokens bereit.
Hintergrund
Stellen Sie sich vor, Sie moechten eine Drittanbieteranwendung verwenden, die auf Daten aus Ihrem Google-Konto zugreifen muss. Sie wuerden dieser Drittanbieter-App nicht Ihren Google-Benutzernamen und Ihr Passwort geben wollen, oder? Hier kommt OAuth ins Spiel. Es ermoeglicht Ihnen, dieser Anwendung Zugriff auf Ihre Google-Daten zu gewaehren, ohne Ihre Google-Zugangsdaten zu teilen.
Grundlagen von OAuth 2.0
OAuth 2.0 konzentriert sich auf die Einfachheit fuer Client-Entwickler und bietet gleichzeitig spezifische Autorisierungsflows fuer Webanwendungen, Desktop-Anwendungen, Mobiltelefone und Wohnzimmergeraete. Hier ist eine vereinfachte Aufschluesselung:
Resource Owner: Der Benutzer, der eine Anwendung autorisiert, auf sein Konto zuzugreifen. Der Zugriff der Anwendung auf das Benutzerkonto ist auf den "Scope" der erteilten Autorisierung beschraenkt (z.B. Lesen oder Schreiben eines bestimmten Datentyps).
Client: Die Anwendung, die auf das Benutzerkonto zugreifen moechte. Bevor sie dies tun darf, muss sie vom Benutzer autorisiert werden, und die Autorisierung muss von der API validiert werden.
Resource Server: Der Server, der die Benutzerkonten hostet. Er kann Anfragen fuer geschuetzte Ressourcen unter Verwendung von Access Tokens akzeptieren und beantworten.
Authorization Server: Dieser Server verifiziert die Identitaet des Benutzers und stellt dann Access Tokens an die Anwendung aus.
OAuth 2.0 Flows
Es gibt verschiedene "Flows" oder "Grant Types" fuer unterschiedliche Arten von Anwendungen und Anwendungsfaelle:
Authorization Code (fuer Apps, die auf einem Webserver laufen): Dies ist der am haeufigsten verwendete Flow, insbesondere fuer Web-Apps. Er beinhaltet die Weiterleitung des Benutzers zum Dienst, wo er sich anmeldet. Nach der Anmeldung wird er mit einem Authorization Code zurueck zur Anwendung geleitet, den die Anwendung gegen ein Access Token eintauschen kann.
Implicit (fuer Apps, die im Browser laufen): Dieser Flow ist fuer User-Agent-basierte Apps (z.B. Single-Page-Apps), bei denen das Access Token sofort zurueckgegeben wird, ohne einen zusaetzlichen Authorization Code-Austauschschritt.
Resource Owner Password Credentials: Dieser Flow ermoeglicht es der Anwendung, den Benutzernamen und das Passwort des Benutzers direkt zu uebermitteln. Er wird nur fuer vertrauenswuerdige Anwendungen empfohlen, da er die Weitergabe der Benutzer-Zugangsdaten beinhaltet.
Client Credentials: Wird verwendet, wenn der Client selbst der Resource Owner ist; zum Beispiel, wenn der Client ein Hintergrunddienst ist.
Tokens
Anstatt die Zugangsdaten des Benutzers zu verwenden, nutzt OAuth 2.0 Tokens. Es gibt zwei Typen:
Access Token: Ermoeglicht der Anwendung, API-Anfragen im Namen des Benutzers zu stellen. Es ist kurzlebig.
Refresh Token: Kann verwendet werden, um ein neues Access Token zu erhalten, wenn das urspruengliche Access Token abgelaufen ist. Es hat eine laengere Lebensdauer als ein Access Token.
Sicherheit
OAuth 2.0 setzt auf SSL/TLS fuer die Sicherheit. Es gewaehrleistet die Vertraulichkeit der Daten zwischen Client, Autorisierungsserver und Ressourcenserver. Selbst wenn es Angreifern gelingt, ein Access Token abzufangen, koennen sie es nicht ueber dessen Ablauf (typischerweise eine kurze Dauer) hinaus oder ausserhalb des Scopes verwenden, fuer den es ausgestellt wurde.
Fazit
OAuth 2.0 ist ein leistungsstarkes und flexibles Framework, das Drittanbieteranwendungen den Zugriff auf Benutzerdaten ermoeglicht, ohne die Benutzer-Zugangsdaten preiszugeben. Es ist zu einem wesentlichen Werkzeug im modernen Web geworden und bietet Benutzern und Entwicklern ein sicheres und effizientes Mittel zur Vergabe und Verwaltung von Berechtigungen ueber verschiedene Dienste und Anwendungen hinweg.