web-dev-qa-db-fra.com

Quel est le code d'état HTTP approprié à renvoyer si un utilisateur tente de se connecter avec un nom d'utilisateur / mot de passe incorrect, mais au format correct?

Une question similaire est postée ici: Qu'est-ce qu'un code d'état HTTP approprié à renvoyer par un REST pour un échec de validation?

La réponse dans le fil de discussion ci-dessus indique que "Par exemple, si l'URI est censé avoir une date ISO-8601 et que son format est incorrect ou s'il fait référence au 31 février, vous renverriez alors un HTTP 400. Idem si vous vous attendez à ce que XML bien formé dans un corps d'entité et l'analyse échoue. "

Cependant, que se passe-t-il si l'utilisateur a soumis des données correctement formatées? J'entends par là que l'utilisateur a soumis une chaîne/un texte alphabétique simple pour le nom d'utilisateur et le mot de passe (ce qui est parfaitement valable pour mon application). Le seul problème est que le mot de passe ne correspond pas au nom d'utilisateur. Dans ce cas, 400 sera incorrect car sa syntaxe est parfaitement valide et bien formée.

Un 401 serait incorrect (comme suggéré ici: Quel code d'état HTTP pour indiquer le nom d'utilisateur ou le mot de passe étaient incorrects? ) car l'utilisateur n'essaye pas d'accéder à une page, il essaie simplement de se connecter et de saisir les données qui ne correspond pas.

Si vous regardez en arrière dans le premier message auquel je suis lié, la deuxième réponse indique que 422 est la réponse correcte (et elle me semble correcte), cependant, j'utilise Django Rest Framework et 422 ne fait pas partie des codes d'état (une liste des codes d'état faisant partie de DRF est disponible ici: http://www.Django-rest-framework.org/api-guide/status-codes/ # erreur-client-4xx )

404 ne semble pas non plus être correct car les données ont été acceptées avec succès et non refusées.

Cela dit, quelle est la vraie réponse correcte à utiliser?

38
user2719875

Le code HTTP correct serait en réalité 401. De le RFC :

Le code d'état 401 (non autorisé) indique que la demande n'a pas été appliquée car elle ne dispose pas d'informations d'authentification valides pour la ressource cible. Le serveur générant une réponse 401 DOIT envoyer un champ d'en-tête WWW-Authenticate (paragraphe 4.1) contenant au moins un défi applicable à la ressource cible.

Si la demande comprenait des informations d'identification pour l'authentification, la réponse 401 indique que l'autorisation a été refusée pour ces informations. L'agent d'utilisateur PEUT répéter la demande avec une nouvelle ou Champ d'en-tête d'autorisation remplacé (section 4.2).

55
sjagr
3
Tony Arnold

Je pense qu'il sera bon de définir le code de statut de réponse 200 . Pour empêcher l'attaque de la liste de mots. En énorme énorme cybercriminel ne pouvait pas identifier quelle demande et les réponses sont correctes)))

0
Levon