RESTful-Service-Authentifizierung

8

Gemäß der REST-Spezifikation soll der Dienst staatenlos sein; Aber dann wird es schwierig, die Authentifizierung zu aktivieren. Einige der Dinge, die ich gelesen habe, sagten, "REST Stateful zu machen ist kein Ende der Welt". Aber das ist nicht der Punkt, der Punkt ist, der Spezifikation zu folgen und konsequent zu sein.

Also stelle ich diese Frage hier in der Hoffnung, dass mich jemand in die richtige Richtung führen könnte. Ich arbeite mit Spring MVC, um einen REST-Service zu erstellen. Ich habe keine Ansichten. Es ist ein echter REST-Dienst, der JSON konsumiert / produziert. Ich brauche einen Mechanismus für die Authentifizierung (und Autorisierung auf der Straße) für diese Anwendung, die zustandslos ist und der REST-Spezifikation folgt. Der Client wird in JavaScript (Backbone.js, CoffeeScript) geschrieben und akzeptiert Benutzernamen / Passwort von einem Benutzer. Dann wird es diese Informationen auf dem Server veröffentlichen.

Wie kann ich eine echte zustandslose Authentifizierung (und Autorisierung) in einer Spring-basierten Anwendung erreichen?

Digest-Authentifizierung über SSL - Ist das der richtige Weg?

    
jsf 08.02.2012, 21:31
quelle

3 Antworten

2

Die Sitzungsverwaltung unterscheidet sich von der Statusverwaltung.

Ihre Server-Seite während des Handshakes kann ein Token generieren und jedes Mal, wenn der Client einen Anruf tätigt, muss er das Token entweder dem Kopf hinzufügen oder aber wo Ihr Server analysieren kann und entscheiden, ob Sie den Anruf erlauben können weitermachen.

Der Server muss keinen Zustand aufrechterhalten, um die Gültigkeit dieses Tokens zu überprüfen, das mit einem Algorithmus durchgeführt werden kann.

    
Shahzeb 08.02.2012 22:14
quelle
2

Haben Sie untersucht, wie Spring Security funktioniert? Spring Security verwenden Ich konnte benutzerdefinierte HTTP-Autorisierungsheader vom Client in der REST-Anforderung hinzufügen. Dies wird serverseitig extrahiert, der anfragende Benutzer wird authentifiziert und es ist möglich, den Zugriff auf bestimmte Ressourcen zu autorisieren.

    
stoffer 10.02.2012 09:43
quelle
1

Sie können entweder Basic- oder Digest-Authentifizierung über SSL verwenden, von denen keiner etwas Bedeutendes über den Status aussagt. Es kann auch ein Cookie vom Server zurückgeschickt werden, den Ihr Client bei weiteren Anfragen zurücksenden muss (ich glaube, dass der Javascript-Code das alles für Sie übernimmt). Es sind andere Authentifizierungsmechanismen möglich, aber sie sind komplexer und nicht unbedingt geeignet. (Der andere Schlüssel, der ordnungsgemäß staatenlos ist, ist Client-authentifiziertes SSL, aber dafür muss der Client ein SSL-Schlüsselpaar installiert haben und der Server muss wissen, was diese Identität bedeutet, und es ist ein wenig komplexer zu implementieren.)

Verwenden Sie auf der Serverseite Spring Security, da dies die Handhabung all dieser Dinge ziemlich einfach macht. Es funktioniert gut mit Spring MVC.

    
Donal Fellows 10.02.2012 11:20
quelle