2009-07-15 6 views
1

Ich habe eine Webanwendung, die RESTful URL-Muster verwendet. Wenn ein Benutzer derzeit versucht, auf eine Seite zuzugreifen, auf der er authentifiziert werden muss, gibt er nichts zurück. Ist es in diesem Fall empfehlenswert, den HTTP-Statuscode zurückzugeben? Würde ich 403 oder einen anderen verwenden?REST HTTP-Statuscode für Inhalt, der Authentifizierung benötigt?

+0

REST hat nichts mit URI-Mustern zu tun. "RESTful URL-Muster" ist völliger Unsinn. Ich vermute, dass Ihre API einfach RPC ist. – aehlke

Antwort

3

Sie sollten eine Antwort mit dem HTTP-Statuscode senden.

würde ich zurück, obwohl kein 403 Forbidden senden, wie die Spezifikation legt für diesen Statuscode:

Der Server hat die Anforderung verstanden, aber weigert sich, sie zu erfüllen. Autorisierung wird nicht helfen, und die Anfrage, sollten Sie nicht

Return einen 401 Unauthorized Statuscode stattdessen wiederholt werden. Sehen Sie diese für weitere Informationen über den Status-Codes:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

So wie ich tue dies mit Jersey ist eine Antwort mit dem Status zu senden und dann gehört eine String Einheit, die eine menschliche lesbare Nachricht enthält, z.B.

Response response = Response.status(Status.PRECONDITION_FAILED).entity(
        new String("Incorrect " + id + " [" + id + "]")).build(); 

Dies wird dem Client angezeigt. Ich werfe eine Jersey WebApplicationException, die diese Antwort umschließt.

+0

Danke Jon, das war sehr hilfreich. –

1

Wenn sie keine Berechtigungen haben, geben Sie 401 zurück, um ihnen die Möglichkeit zu geben, auf die Authentifizierungsherausforderung zu antworten, oder 403, wenn Sie sie nicht haben wollen.

Restlet 1.1 ab 403 zurückgeben, während frühere Versionen 401 zurückgeben. 403 scheint als richtiger, wenn nicht unbedingt hilfreicher angesehen zu werden.

0

Kommt drauf an. Sie sollten wirklich etwas zurückgeben, nur um eine anständige Kundenerfahrung zu haben. Wenn Sie ihnen die Gelegenheit geben möchten, sich in diesem Moment zu authentifizieren, können Sie eine 401 zurückgeben, und der Client weiß, dass er Anmeldeinformationen mit der Standardauthentifizierung weitergibt. Wenn Sie jedoch bevorzugen, dass sie sich über einen anderen Mechanismus authentifizieren (eine Login-URL und dann ein Cookie oder etwas Ähnliches), dann ist die Rückgabe eines 403 wahrscheinlich der richtige Weg.

0

lol ... in der REST-API-Implementierung, die ich gerade gebaut habe, gab ich einen 401-Statuscode mit einem Antworttext zurück, der "Auf Wiedersehen" las. War das erste, worüber sich der Kerl beschwerte, wenn er mit API interagierte. Ich denke immer noch "Auf Wiedersehen" sagte alles;)

Verwandte Themen