31 Stimmen

Implementierung der OAuth 2.0-Authentifizierung für meine API

Ich habe die Facebook Graph API (verwendet oauth 2.0 für die Authentifizierung) erfolgreich für eine Weile jetzt verwendet. Ich muss jetzt meine eigene API schreiben, die es Entwicklern ermöglicht, sich auf ähnliche Weise mit ihr zu verbinden. Ich habe in verschiedenen Bibliotheken angesehen, aber ich möchte etwas ein wenig schlanker, so dass ich beschlossen habe, meine eigene Rolle. Wenn ich mir den Code ansehe, mit dem ich einen Benutzer bei Facebook authentifizieren muss, sieht es relativ einfach aus, aber bitte korrigieren Sie mich, wenn ich vom Weg abgekommen bin.

Zunächst müsste ich eine sichere Seite bereitstellen, auf die der Verbraucher umgeleitet werden müsste. https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEY&redirect_url=CALLBACK_URL . Der Benutzer würde die Anwendung überprüfen, dann würde ich wieder auf die URL in der Callback-URL mit dem oauth_token in der Abfragezeichenfolge zur Verfügung gestellt umleiten. Ich nehme an, ich könnte nur eine zufällige eindeutige Zeichenfolge hier für die oauth_token generieren und speichern Sie es gegen den Benutzer für diesen bestimmten Verbraucher (EDIT: Bitte sehen Sie die Antwort unten, dies sollte für jeden Verbraucher Anwendung und nicht der Benutzer eindeutig sein).

Damit ist Schritt 1 erledigt. Ich muss nun eine zweite sichere Seite bereitstellen, die der Verbraucher mit einer Web-Anfrage ansteuern würde. https://api.mydomain.com/oauth/access_token?client_id=CONSUMER_KEY&client_secret=CONSUMER_SECRET&oauth_token=OAUTH_TOKEN_RETURNED_ABOVE . Dies würde es dem Verbraucher ermöglichen, das oben zurückgegebene oauth_token gegen ein Zugangs-Token auszutauschen. Auch hier würde ich einfach eine zufällige, eindeutige Zeichenfolge generieren und sie für den Benutzer dieses bestimmten Verbrauchers speichern.

Jetzt würde meine API das access_token für Methoden akzeptieren, die versuchen, benutzerspezifische Informationen abzurufen, die sie verwenden.

Ich würde gerne wissen, ob ich die Dinge richtig verstanden habe. Die OAuth 2.0 Spezifikation scheint extrem trivial zu sein, wenn das der Fall ist. Und warum müssen wir den oauth_token mit einem access_token austauschen? Ich habe meine eigene Idee, aber ich wäre dankbar, wenn jemand helfen könnte, dies zu klären.

Ich würde mich sehr über Ihr Feedback freuen, denn ich möchte nicht stundenlang damit beschäftigt sein, dies zu implementieren, wenn es völlig falsch ist.

Danke

49voto

Teoman Soygul Punkte 25294

Eigentlich wären Protokollflussdiagramme extrem hilfreich, um Spezifikationen wie die von OAuth 2 zu visualisieren, aber es gibt nur ein paar Teilarbeiten da draußen. Da ich gerade eine clientseitige OAuth 2-Bibliothek implementiert habe, kann ich bestätigen, dass Sie auf dem richtigen Weg sind. Aber hier ist ein Haken:

oauth_token gehört zu Ihrer Client-Anwendung (z. B. einem Desktop-Facebook-Reader), die Ihre Anwendung authentifiziert (genau wie eine ID). Sie übermitteln dies, um ein access_token zurückzubekommen, das für Ihre Anwendung und den angemeldeten Benutzer spezifisch ist und Ihnen den Zugriff auf eingeschränkte Ressourcen in Bezug auf den Benutzer ermöglicht.

Hier ist ein grundlegender Authentifizierungsprozess für Desktop-Anwendungen (entnommen aus: http://developers.gigya.com/020_Developer_Guide/85_REST/OAuth2 )

REST OAuth 2.0

Eigentlich ein Flussdiagramm mit Zeitleiste (von oben nach unten, entnommen aus: http://www.ibm.com/developerworks/web/library/wa-oauthsupport/?ca=drs- )

Protocol flow

Und schließlich lautet das vollständige Verfahren: (entnommen aus http://h2anetwork.org/ProjectDocs/DPI/DPI_Framework.html )

OAuth protocol flow

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X