Was zum Teufel ist OAuth, Stormpath

Ein in die Tiefe schauen, was das OAuth-Protokoll ist, darunter Wann und wie die vier verschiedenen grant-Typen; Autorisierungs-code, implizite, Passwort-Anmeldeinformationen, und die client-Anmeldeinformationen.
wie funktioniert oauth arbeiten

von Randall Degges | Mai 11, 2015 |

Stormpath verbringt viel Zeit mit dem erstellen authentication services und Bibliotheken, sind wir Häufig gestellte Entwickler (neue und erfahrene gleichermaßen): „Was zum Teufel ist OAuth?“.

Es gibt eine Menge Verwirrung darüber gibt, was OAuth eigentlich ist.

Einige Leute denken, OAuth-login-flow (wie wenn Sie sich in einer Anwendung, die mit Google-Login), und einige Leute denken, OAuth als „Sicherheits-Ding“, und weiß nicht wirklich viel mehr als das.

Werde ich gehen Sie durch, was OAuth ist, erklären, wie Oauth funktioniert, und hoffentlich verlassen Sie mit einem Gefühl, wo und wie Sie Oauth nutzen Ihrer Anwendung.

Was Ist OAuth?

Um zu beginnen, auf einem hohen Niveau, OAuth ist nicht eine API oder einen Dienst: es ist ein offener standard für die Autorisierung und jeder Entwickler kann es umsetzen.

OAuth ist ein standard, der Anwendungen (und den Entwicklern, die lieben Sie) verwenden können, um client-Anwendungen mit „secure-Delegierter Zugriff“. OAuth funktioniert über HTTP und autorisiert Geräte-APIs, – Server und-Anwendungen mit access-Token anstelle von Anmeldeinformationen, die wir gehen über in die Tiefe unten.

Es gibt zwei Versionen von OAuth: das OAuth 1.0 a und OAuth2. Diese Angaben sind völlig Verschieden voneinander, und können nicht zusammen verwendet werden: es ist keine Abwärtskompatibilität zwischen Ihnen.

Welche ist beliebter? Gute Frage! Heutzutage (zu diesem Zeitpunkt des Schreibens), OAuth2 ist ohne Zweifel die am weitesten verbreitete form der OAuth. So von nun an, wenn ich Schreibe, einfach „OAuth“, ich spreche über OAuth2 — wie es wahrscheinlich ist, was Sie verwenden werden.

Nun — auf das lernen!

Was Bedeutet OAuth Tun?

OAuth ist im wesentlichen ein Protokoll, das unterstützt Autorisierungs-workflows. Was dies bedeutet ist, dass es gibt Ihnen die Möglichkeit, um sicherzustellen, dass ein bestimmter Benutzer hat Berechtigungen, um etwas zu tun.

OAuth ist nicht gemeint, um Dinge zu tun, wie überprüfen der Identität eines Benutzers — das ist die Betreuung durch einen Authentifizierungs-service. Die Authentifizierung ist beim überprüfen der Identität eines Benutzers (wie zu Fragen für einen Benutzername / Passwort), in der Erwägung, dass die Autorisierung beim check, um zu sehen, welche Berechtigungen für einen vorhandenen Benutzer schon hat.

Wie OAuth Funktioniert

Es gibt 4 separate Modi von OAuth, sogenannte grant-Typen. Jeder Modus dient einem anderen Zweck und wird anders verwendet. Je nachdem, welche Art von service Sie bauen, müssen Sie möglicherweise verwenden Sie eine oder mehrere dieser grant-Typen um Zeug zu machen, arbeiten.

Wir gehen über jeweils separat.

Der Authorization-Code-Grant-Typ

Der Autorisierungs-code OAuth-grant-Typ verwendet werden soll, die auf web-Servern. Sie wollen verwenden Sie den Autorisierungs-code – grant-Typ, wenn Sie bauen eine web-Anwendung mit server-side-code ist NICHT öffentlich. Wenn Sie möchten, implementieren Sie eine OAuth-flow in einer server-seitigen web-Frameworks wie Express.js, Flask, Django, Ruby on Rails, ein Autorisierungs-Code ist der Weg zu gehen.

Hier ist, wie es funktioniert:

  • Ein anonymer Benutzer besucht Ihre website.
  • Sie möchten, loggen Sie sich in Ihre Website mit Third-Party Identity, woanders gespeichert: Google, Facebook, Ihre eigenen OAuth-Dienst, den Sie erstellt, etc.
  • Sie klicken auf einen „Anmelden“ – button auf Ihrer Website und werden weitergeleitet, um Ihre Identifizierung auf der Webseite des Anbieters (z.B.: Google, Facebook, etc.), und aufgefordert werden, akzeptieren Sie bestimmte Berechtigungen.
  • Wenn Sie akzeptieren, dass diese Berechtigungen, identity provider leitet den Benutzer ZURÜCK zu Ihrer web-Anwendung zusammen mit einem Autorisierungscode.
  • Ihr web-server wird dann eine Anfrage an den identity-provider-API, mit der Autorisierungs-code, den Sie gerade gegeben wurden, und du wirst dann ein access-token , die Sie verwenden können, um tatsächlich diesen Benutzer abrufen der Informationen.

Hier ist, wie es normalerweise aussieht:

Wie zu Verwenden Authorization-Code-Grant-Typen

Sie im Grunde erstellen Sie einen login-button auf Ihrer login-Seite mit einem link der so aussieht:

Wenn der Benutzer auf diese Schaltfläche klickt, die Sie besuchen werde login.blah.com wo werden Sie aufgefordert, unabhängig von Berechtigungen, die Sie angefordert haben.

Nach dem akzeptieren der Berechtigungen, der Benutzer umgeleitet werden, um wieder auf Ihre Website, auf welcher URL Sie angegeben haben in der redirect_uri-parameter, zusammen mit einem Autorisierungscode. Hier ist, wie es Aussehen könnte:

Du wirst dann Lesen Sie in der code-querystring-Wert, und exchange, die für einen access token mit dem Anbieter der API:

HINWEIS: Die client_id und client_secret Sachen, die Sie sehen in den obigen Beispielen sind, sofern der identity-provider. Beim erstellen eines Facebook-oder Google-app zum Beispiel, Sie geben dir diese Werte.

Einmal, dass die POST-Anforderung wurde erfolgreich abgeschlossen, Sie erhalten dann ein Zugangs-token , die Sie verwenden können, um echte API-Aufrufe abrufen, die Informationen des Benutzers vom identity provider.

Der Implicit Grant Type

Der implicit grant type ist gedacht für client-seitige web-Anwendungen (wie React.js oder Angular.js), die nicht über eine server-seitige Komponente — oder jede Art von mobiler Anwendung, die eine mobile web-browser.

Implizite Zuschüsse sind ideal für client-seitige web-Anwendungen und mobile-apps, da dieser Zuschuss Typ ist es nicht erforderlich, zu speichern, secret key-Informationen an alle — das bedeutet Sie können melden Sie jemand, den Sie in Ihre Website / app, OHNE zu wissen, was Ihre Anwendung client_secret ist.

Hier ist, wie es funktioniert:

  • Einem anonymen Nutzer besucht Ihre website oder öffnet sich für Ihre mobile app.
  • Sie möchten, loggen Sie sich in Ihre Website mit Third-Party Identity, woanders gespeichert: Google, Facebook, Ihre eigenen OAuth-Dienst, den Sie erstellt, etc.
  • Sie klicken auf einen „Anmelden“ – button auf Ihrer Website / app und umgeleitet werden, um Ihre Identifizierung auf der Webseite des Anbieters (z.B.: Google, Facebook, etc.), und aufgefordert werden, akzeptieren Sie bestimmte Berechtigungen.
  • Wenn Sie akzeptieren, dass diese Berechtigungen, identity provider leitet den Benutzer ZURÜCK zu Ihrer web-Anwendung zusammen mit einem access-token.
  • Sie können diese verwenden Sie diesen access token , um tatsächlich diesen Benutzer abrufen der Informationen.

Hier ist, wie es normalerweise aussieht:

Wie die Implizite Gewährung Typ

Sie im Grunde erstellen Sie einen login-button auf Ihrer login-Seite enthält einen link, der ungefähr so aussieht:

Wenn der Benutzer auf diese Schaltfläche klickt, die Sie besuchen werde login.blah.com wo werden Sie aufgefordert, unabhängig von Berechtigungen, die Sie angefordert haben.

Nach dem akzeptieren der Berechtigungen, der Benutzer umgeleitet werden, um wieder auf Ihre Website, auf welcher URL Sie angegeben haben in der redirect_uri-parameter, zusammen mit einem access-token. Hier ist, wie es Aussehen könnte:

Du wirst dann Lesen Sie in den token-query-string-Wert, die Sie verwenden können, um echte API-Aufrufe abrufen, die Informationen des Benutzers vom identity provider.

HINWEIS: Die client_id Sachen, die Sie sehen in den obigen Beispielen sind, sofern der identity-provider. Beim erstellen eines Facebook-oder Google-app zum Beispiel, Sie geben dir diese Werte.

Die Kennwort-Anmeldeinformationen Gewähren, Typ

Die Kennwort-Anmeldeinformationen gewähren-Typ sollte verwendet werden, für die erste Klasse web-Anwendungen ODER mobile Anwendungen. Dies ist ideal für offizielle web-und mobile apps für Ihr Projekt, denn Sie vereinfachen die Autorisierungs-workflow, indem Sie NUR Fragen die ein Benutzer für den Benutzernamen und das Passwort, im Gegensatz zu dass Sie diese auf Ihre Website, etc.

Was dies bedeutet ist, dass, wenn Sie aufgebaut haben, Ihre eigenen OAuth-service – (login.yoursite.com), und dann erstellt Ihr eigene OAuth-client-Anwendung, die Sie verwenden konnte, diesen Zuschuss geben, um Benutzer zu authentifizieren für Ihre native Android -, iPhone-und web-apps.

Aber hier ist der Haken: NUR IHRE native web – / mobile-Anwendungen können mit dieser Methode! Lassen Sie uns sagen, Sie sind Google. Wäre es OK für Sie, um diese Methode zu verwenden, um Benutzer zu authentifizieren, die in den offiziellen Google-Android-und iPhone-apps, aber NICHT OK für eine andere Website verwendet Google-login zu authentifizieren Menschen.

Der Grund dafür ist dieser: durch die Verwendung der Passwort – grant-Typ, werden Sie im wesentlichen das sammeln von Benutzernamen und Passwort von Ihrem Benutzer direkt. Wenn Sie zulassen, dass ein Drittanbieter, um dies zu tun, laufen Sie Gefahr, dass Sie diese Informationen speichern und verwenden Sie es für schlechte Zwecke (böse!).

Hier ist, wie es funktioniert:

  • Einem anonymen Nutzer besucht Ihre website oder öffnet sich für Ihre mobile app.
  • Sie möchten sich in Ihrem Website / app mit Ihrer Identität (gespeichert in der OAuth-service, den Sie erstellt haben).
  • Sie die Eingabe Ihrer Benutzernamen und Passwort in Ihre Website / app, und Sie dann überprüfen Sie diese Informationen über einen API-Aufruf und erhalten einen Zugangs-token.
  • Sie können diese verwenden Sie diesen access token , um tatsächlich diesen Benutzer abrufen der Informationen.

Hier ist, wie es aussieht:

Wie Verwenden Sie die Kennwort-Anmeldeinformationen Gewähren, Typ

Sie im Grunde erstellen Sie ein HTML-Formular von einer Art auf Ihre login-Seite akzeptiert die Anmeldeinformationen des Benutzers — in der Regel Benutzername und Passwort.

Sie erhalten dann akzeptieren Sie die Anmeldeinformationen des Benutzers, und stellen Sie Sie auf Ihre Identität-Dienst über das folgende Anfrage-format:

Like this post? Please share to your friends:
Schreibe einen Kommentar

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: