2010-08-19 26 views
12

Alors envoyez quelques en-têtes d'état différents dans mon API, y compris 404, 409, 201, 302 et similaires. Maintenant, je rencontre des problèmes avec 401 Unauthorized. Je l'envoie actuellement si un utilisateur n'est pas connecté (l'intégralité de l'API est gérée par droits) ou si un utilisateur ne satisfait pas aux exigences d'accès spécifiques pour la ressource en cours de récupération/modification.Un statut HTTP distinct pour non connecté par rapport à non autorisé dans une API RESTful

Maintenant, je contrôle également le client frontal (une application jQuery/HTML), et je voudrais faire la différence entre les deux cas pour 401. Y at-il un statut distinct que je devrais utiliser pour ne pas être connecté? Est-ce la meilleure façon de le gérer pour envoyer le contenu du corps à côté de l'en-tête?

+0

Question similaire à https://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses –

Répondre

20

Vous devez utiliser 403 pour indiquer que l'utilisateur n'est pas autorisé à accéder à la ressource. L'utilisation de 401 sert à indiquer que l'utilisateur doit fournir des informations d'identification telles que vous les utilisez actuellement. Voir les descriptions de 401 et 403here.

3

Comme par exemple, vous devriez utiliser 403 lorsque vous avez authentifié l'utilisateur, mais l'utilisateur n'a pas la permission de faire ce qu'elle demande. par exemple. vous pouvez autoriser GET'ing une ressource, mais pas DELETE ou PUT.

  • 401 serait incorrect, car il dit en substance: « Je ne reconnais pas ces informations d'identification »
  • 403 est exact, car il est dit que « Vous n'êtes pas autorisé à le faire »

Dans tous les cas, le corps de la réponse doit toujours contenir plus d'informations, even when it's an error response. Cela permet à un client de sortir, en espérant aller de l'avant (en utilisant des liens incorporés) ou en fournissant suffisamment d'informations sur la façon de procéder (par exemple "Mes dossiers indiquent que vous n'avez pas l'autorisation de supprimer XXX". Permission FOOBAR ").

+0

Ne serait-ce pas "ne pas avoir la permission de FOOBAR XXX"? – Hello71

+0

Le "ne pas avoir l'autorisation de supprimer XXX" a été considéré comme une réponse à une requête DELETE, donc oui. Si vous répondez à une requête PUT en 403, vous devez le faire correctement. La chose FOOBAR aurait dû lire "rôle FOOBAR". Le but est de dire à l'utilisateur comment il peut résoudre le problème, mais que (la conception du message d'erreur) est un autre sujet! – mogsie