2009-11-04 4 views
40

Die andere Minute habe ich einen Artikel über OAuth gelesen. Es beschreibt insbesondere die Tokens, die während einer Reihe von Anfragen zwischen dem Client und dem Dienstanbieter ausgetauscht werden.OAuths Tokens und Sitzungen in REST

Der Artikel erwähnt auch, dass OAuth in RESTful-APIs als Autorisierungsschicht eine erhebliche Popularität erlangt. Wie ich verstanden habe, sollte REST vollständig staatenlos gehalten werden.

Die Frage: Tauscht nicht dieser wiederholte Token Torpedo REST "sein staatenlos" -Prinzip? IMHO die Token können als eine Art Sitzungs-ID gesehen werden, nicht wahr?

Antwort

76

OAuth-Token sind explizit eine Sitzungs-ID, die Interaktion zwischen Anforderungen im OAuth-Token-Verhandlungsprotokoll ist nicht zustandslos, da die Anforderungen in einer bestimmten Reihenfolge ausgeführt werden müssen und je nach Bedarf auf dem Server gespeichert werden müssen verfolgen Dinge wie, als sie ausgestellt wurden. Also, ja, OAuth verletzt die strengen Prinzipien einer RESTful-Architektur.

Leider gibt es die reale Welt TM mit zu kämpfen, wo wir Dinge tun müssen, wie Anwendungen im Namen von Einzelpersonen authentifizieren können, ohne ihr Passwort zu verlangen, was OAuth ziemlich gut tut. Es wäre unmöglich, ein ähnlich sicheres Authentifizierungsschema ohne diese Art von Zustand zu implementieren. Tatsächlich bestand eine der von OAuth (1.0a) geforderten Änderungen darin, dem Token-Verhandlungsprotokoll den Status more hinzuzufügen, um ein Sicherheitsrisiko zu verringern.

Also torpediert REST's statusloses Prinzip? Ja. Spielt das eine Rolle? Nicht, es sei denn, Sie leben in einem Elfenbeinturm :-)

+11

Ich mag die reale Welt (TM). Danke für die Antwort! – Boldewyn

+6

+1 zum Bringen der realen Welt in REST –

+4

Sobald die OAuth-Authentifizierung verarbeitet wurde, kann sie jedoch effektiv zustandslos sein - das OAuth-Token wird vom Client gespeichert und zusammen mit jeder REST-Anforderung im Autorisierungsheader gesendet. –

6

Authentifizierung ist ein Zustand, der irgendwie im Umgang mit Web-Interaktionen verfolgt werden muss. Letztendlich, wenn Ihre App erholsam ist oder nicht, muss der Server in der Lage sein, jeden "authentifizierten Zustand" zu verfolgen und dies erfordert leider eine Art der Umgehung der zugrundeliegenden zustandslosen Natur von HTTP und zusätzlicher Transporte/Techniken (wie REST) es.

Also jede Art von authentifizierten App zu entwickeln, muss ein Grundsatz des Staates irgendwo beschuht werden, und wenn das so passiert, OAuth auf REST zu sein, so muss es sein!