Pour une page Web qui existe, mais pour laquelle un utilisateur n'a pas les privilèges suffisants (il n'est pas connecté ou n'appartient pas au groupe d'utilisateurs approprié), quelle est la réponse HTTP appropriée à servir ? 401 ? 403 ? Quelque chose d'autre ? Ce que j'ai lu jusqu'à présent sur chacune de ces réponses n'est pas très clair quant à la différence entre les deux. Quels sont les cas d'utilisation appropriés pour chaque réponse ?
Une explication claire de [Daniel Irvine][1] :
Il y a un problème avec 401 Unauthorized, le code d'état HTTP pour les erreurs d'authentification. Et c'est justement ça : c'est pour l'authentification, pas pour l'autorisation. En recevant une réponse 401, le serveur vous dit que vous n'êtes pas authentifié. vous n'êtes pas authentifié, soit pas du tout ou incorrectement. mais veuillez vous réauthentifier et réessayer". Pour vous aider, il inclura toujours un en-tête WWW-Authenticate qui décrit comment comment s'authentifier.
Il s'agit d'une réponse généralement renvoyée par votre serveur Web, et non par votre application Web. application web.
C'est aussi quelque chose de très temporaire ; le serveur vous demande d'essayer à nouveau. nouveau.
Donc, pour l'autorisation, j'utilise la réponse 403 Forbidden. C'est une réponse permanente, elle est liée à ma logique d'application, et c'est une réponse plus concrète plus concrète qu'une réponse 401.
Recevoir une réponse 403, c'est le serveur qui vous dit : "Je suis désolé. Je sais Je sais qui vous êtes, je crois qui vous êtes, mais vous n'avez pas l'autorisation d'accéder à cette ressource. mais vous n'avez pas la permission d'accéder à cette ressource. Peut-être que si vous demandez à l'administrateur du système l'administrateur du système gentiment, vous obtiendrez la permission. Mais s'il vous plaît ne me dérange pas moi à nouveau jusqu'à ce que votre situation difficile change. "
En résumé, une réponse 401 Unauthorized doit être utilisée pour une authentification manquante ou mauvaise. ou une mauvaise authentification, et une réponse 403 Forbidden devrait être utilisée ensuite, lorsque l'utilisateur est authentifié mais n'est pas autorisé à effectuer l'opération demandée sur la ressource donnée.
Une autre [belle illustration][2] de la manière dont les codes d'état http doivent être utilisés.
[!entrer la description de l'image ici][3]][3]
[1] : http://www.dirv.me/blog/2011/07/18/understanding-403-forbidden/index.html [2] : https://www.loggly.com/blog/http-status-code-diagram/ [3] : https://i.stack.imgur.com/ppsbq.jpg
Voir [RFC2616][1] :
401 Unauthorized :
Si la demande comprenait déjà des informations d'identification d'autorisation, la réponse 401 indique que l'autorisation a été refusée pour ces informations d'identification.
403 Forbidden (Interdit) :
Le serveur a compris la demande, mais refuse de l'exécuter.
Mise à jour
D'après votre cas d'utilisation, il semble que l'utilisateur ne soit pas authentifié. Je renverrais 401.
_Edit : [RFC2616][1] est obsolète, voir [RFC7231][2] et [RFC7235][3].
[1] : https://tools.ietf.org/html/rfc2616#section-10.4.2 [2] : https://tools.ietf.org/html/rfc7231#section-6.5.3 [3] : https://tools.ietf.org/html/rfc7235#section-3.1
Selon la [RFC 2616][1] (HTTP/1.1) 403 est envoyé lorsque :
Le serveur a compris la demande, mais refuse de la satisfaire. L'autorisation ne sera pas utile et la demande NE DEVRAIT PAS être répétée. Si la méthode de demande n'était pas HEAD et que le serveur souhaite rendre publique la raison pour laquelle la demande n'a pas été satisfaite, il DEVRAIT décrire la raison du refus dans l'entité. Si le serveur ne souhaite pas mettre cette information à la disposition du client, le code d'état 404 (Not Found) peut être utilisé à la place.
En d'autres termes, si le client PEUT avoir accès à la ressource en s'authentifiant, le code 401 doit être envoyé.
[1] : http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2