C'est une question conceptuelle.
J'ai une application client (mobile) qui doit prendre en charge une action de connexion sur un service Web RESTful. Étant donné que le service Web est RESTful, cela revient au client d'accepter un nom d'utilisateur / mot de passe de l'utilisateur, de vérifier ce nom d'utilisateur / mot de passe avec le service, puis de se souvenir d'envoyer ce nom d'utilisateur / mot de passe avec toutes les demandes suivantes.
Toutes les autres réponses de ce service Web sont fournies au format JSON.
La question est la suivante: lorsque j'interroge le service Web simplement pour savoir si un nom d'utilisateur / mot de passe donné est valide, le service Web doit-il toujours répondre avec des données JSON m'indiquant son succès ou son échec, ou doit-il renvoyer HTTP 200 avec de bonnes informations d'identification et HTTP 401 sur de mauvaises informations d'identification.
La raison pour laquelle je demande est que certains autres services RESTful utilisent 401 pour de mauvaises informations d'identification, même lorsque vous demandez simplement si les informations d'identification sont valides. Cependant, si je comprends bien les réponses 401, elles représentent une ressource à laquelle vous n'êtes pas censé avoir accès sans informations d'identification valides. Mais la ressource de connexion DEVRAIT être accessible à tout le monde car le but entier de la ressource de connexion est de vous dire si vos informations d'identification sont valides.
En d'autres termes, il me semble qu'une demande comme:
myservice.com/this/is/a/user/action
devrait retourner 401 si de mauvaises informations d'identification sont fournies. Mais une demande comme:
myservice.com/are/these/credentials/valid
ne doit jamais retourner 401 car cette URL (requête) particulière est autorisée avec ou sans informations d'identification valides.
J'aimerais entendre des opinions justifiées d'une manière ou d'une autre à ce sujet. Quelle est la manière standard de gérer cela et la manière standard de gérer cela est-elle logiquement appropriée?
authentication is required and has failed or has not yet been provided
cas, puisque vous ne demandez pas la validité des informations d'identification, mais une ressource spécifique basée sur les informations d'identification que vous fournissez.401 ne doit être envoyé que lorsque la demande nécessite un champ d'en-tête d'autorisation et que l'autorisation échoue. Étant donné que l'API de connexion ne nécessite pas d'autorisation, 401 est donc le mauvais code d'erreur à mon avis
Selon la norme ici https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
* 10.4.2 401 Non autorisé
La demande nécessite une authentification de l'utilisateur. La réponse DOIT inclure un champ d'en-tête WWW-Authenticate (section 14.47) contenant un défi applicable à la ressource demandée. Le client PEUT répéter la demande avec un champ d'en-tête d'autorisation approprié (section 14.8). 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. Si la réponse 401 contient le même défi que la réponse précédente, et que l'agent utilisateur a déjà tenté l'authentification au moins une fois, alors l'utilisateur DEVRAIT se voir présenter l'entité qui a été donnée dans la réponse, puisque cette entité peut inclure des informations de diagnostic pertinentes. L'authentification de l'accès HTTP est expliquée dans "Authentification HTTP: authentification d'accès de base et Digest" [43]. *
la source
Renvoyez 409 avec un message d'erreur approprié.
la source