6 Stimmen

Authentifizierung in einem RESTful-Webdienst

Ich baue einen RESTful-Webservice auf Basis von Spring. Ich verwende Spring Security. Er wird nur von Desktop-Anwendungen aufgerufen. Im Grunde genommen ein maschinenbasierten Webservice.

  • Ich möchte einen benutzerdefinierten Dienst, der die Authentifizierung durchführt. Anschließend weitere, sensiblere Operationen basierend auf dem Ergebnis der Authentifizierung durchführen.

  • Eine andere Möglichkeit besteht darin, die Anmeldeinformationen im Body jeder Anfrage zu senden und im Grunde genommen jedes Mal eine Authentifizierung durchzuführen.

Die Logik besagt, dass der erste Ansatz wahrscheinlich effizienter ist, da es ziemlich aufwändig ist, sich jedes Mal zu authentifizieren.

Was schlagen Sie in Bezug darauf vor? Sollte man zustandslos oder zustandsbehaftet arbeiten? Gibt es bedeutende Nachteile beim zustandsbehafteten Ansatz?

Bis zu diesem Punkt habe ich einige Kapitel aus Java Web Services Up and Running gelesen und auch mehrere Fragen von SO wie diese.

3voto

jmclem Punkte 661

Der REST-Weg, dies zu tun, besteht, wie in den von Ihnen bereitgestellten Links angegeben, darin, sich bei jeder Anfrage zu authentifizieren und KEINE Sitzungen zu speichern.

Was die Authentifizierung mit Benutzername/Passwort bei jeder Anfrage betrifft, so ist dies sicher, wenn Sie ... eine sichere Ebene (https) verwenden können; andernfalls wird das Paar im Klartext übertragen und kann entdeckt werden.

Eine andere Möglichkeit besteht darin, so etwas wie den AWS-Weg zu verwenden (Links zu Amazon hier und hier, zum Beispiel). Hier finden Sie weitere Erklärungen: buzzmedia und samritchie

Vielleicht ist OAuth eine Option, aber ich habe keine Erfahrung damit.

0voto

AzizSM Punkte 5969

Um mit dem REST-Service (Client-Server) zu beginnen, empfehle ich Ihnen dringend, Restlet zu verwenden

Die Authentifizierung für diesen REST-Service kann mit ClientResource definiert werden. Beispiel:

private static ClientResource getClientResource(String uri) {
ClientResource clientResource = new ClientResource(uri);
clientResource.setChallengeResponse(ChallengeScheme.HTTP_BASIC,
        "Benutzername", "Passwort"
        );
return clientResource;
}

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