Code HTTP à utiliser dans “Non Authentifié” et “Non autorisé” cas?
J'ai lu que "401 Unauthorized" code doit être utilisé lorsqu'un utilisateur:
- N'est pas connecté, mais la connexion est requis ("non authentifié");
- Est connecté, mais son profil ne permet pas de voir que l'url ("non autorisé");
Conformément à la RFC, dans les deux cas, le serveur doit retourner 401
code.
Mais j'ai besoin de différencier ensuite dans mes requêtes ajax.
Quelqu'un a une astuce pour résoudre ce problème?
Remarque: je ne veux pas utiliser 403 Forbidden
code, parce que dans 403 "Authorization will not help"
, conformément à la RFC.
Vous devez vous connecter pour publier un commentaire.
Vous devriez passer un en-tête personnalisé en plus du code d'état pour l'application à des besoins spécifiques.
Je crois que la pratique actuelle est de préface en-têtes personnalisés avec
X-
Mise À Jour, Août 2012:
De la RFC 3864 posté dans les commentaires (en date de septembre 2004):
Plus récente RFC (Six mille six cent quarante huit, datée de juin 2012), ils ont expressément adresse
X-
en-têtes.Important à noter est que, bien que
X-
est spécifiquement noté, ils ne sont toujours implicitement cautionner des en-têtes personnalisés comme un moyen de transfert de l'information. Une application spécifique préfixe (MyApp-
) pourrait être plus approprié pour éviter la collision avec les autres en-têtes.Voir aussi: Est-il sécuritaire d'utiliser "X" en-tête dans une réponse HTTP à partir d'un il ya quelques années.
X-
dénote généralement un en-tête personnalisé que le navigateur peut ignorer pour une utilisation régulière.Sauf si vous avez l'intention d'utiliser l'authentification HTTP, la bonne réponse est 403 ("Interdit").
Un code de réponse de 401 déclenche le navigateur pour afficher un mot de passe de la boîte de dialogue, puis la soumettre de nouveau la même demande à un
WWW-Authenticate
- tête avec les données de mot de passe que l'utilisateur a fourni. Ce n'est probablement pas le comportement que vous souhaitez.N'obtenez pas trop accroché sur les explications dans la Rfc -- ce que vous avez vraiment besoin de prêter attention à l'navigateur et moteur de recherche des effets secondaires des différents codes de réponse.
Comme pour le
"Authorization will not help"
peu, dans ce cas, c'est exact, puisque l'utilisation de HTTP autorisation (ce qui signifie plus précisément leWWW-Authenticate
en-tête), en fait, ne va pas aider.Une réponse 403 indique au navigateur que l'utilisateur n'est pas autorisé à en faire la demande, et le navigateur doit pas tenter de recueillir des données d'authentification et de soumettre à nouveau la demande. C'est exactement la réponse que vous êtes après.
Je crois 403 est la bonne. Nous pourrions avoir à régler la langue dans le cahier des charges pour que ce soit clair.
IIS différencie ces cas avec des sous-codes d'état (référence):