Autorisation dans RESTful HTTP API, 401 WWW-Authenticate
je crée un service RESTful pour fournir des données à une application web. J'ai deux questions à ce sujet.
1. Comment traiter les demandes non autorisées?
j'ai l'intention de répondre à des demandes avec les codes suivants:
- la ressource est-elle ouverte et trouvée? 200 OK
- vous devez être authentifié pour accéder à des ressources? 401 non autorisé
- vous N'avez pas accès à un catégorie de ressources? 403 Forbidden
- avez-vous accès à une catégorie de ressources, mais pas de cette ressource spécifique? 404 Not Found pour empêcher les gens d'apprendre à connaître l'existence d'une ressource qu'ils n'y ont pas accès.
- la ressource n'existe-t-elle pas? 404 Not Found
2. WWW-Authenticate
en-tête 401 les réponses d'approvisionnement?
j'ai lu Wikipédia (probablement pas la ressource la plus précise, mais cela fonctionne pour moi) qu'une réponse 401 inclure un WWW-Authenticate
en-tête, Cependant lors d'une recherche plus poussée, Je n'ai pas vraiment pu trouver de ressource indiquant ce que cette valeur signifie Et ce qu'elle devrait être.
j'ai trouvé plusieurs questions et sujets de forum sur cet en-tête et ils semblent tous être sur OAuth, suggérer contre l'utilisation de codes de statut 401 ou dire vous on peut inventer quelque chose.
Quelle est la valeur correcte que cet en-tête devrait contenir?
2 réponses
Pour répondre à tes questions:
comment traiter les demandes non autorisées?
la façon dont vous l'avez décrite est à peu près la façon recommandée pour un service reposant. Pour autant que je puisse voir, il n'y a absolument rien de mal à cela.
Quel en-tête WWW-Authenticate les réponses 401 devraient-elles fournir?
En général, le WWW-Authenticate
header indique au client quel type d'authentification le serveur acceptera. Si le client fait une demande non autorisée, ce qui signifie qu'il envoie une demande avec une manquante ou invalide Authorization
en-tête, le serveur va utiliser WWW-Authenticate
pour indiquer au client le schéma d'authentification qu'il acceptera (c.-à-d. Basic, Digest ou OAuth) et pour quel domaine.
imaginez comme une sorte de question d'identification ou de défi de la part du serveur, c'est-à-dire quelque chose comme "Qui êtes-vous?"ou" prouvez qui vous êtes en fournissant des justificatifs d'identité de la manière suivante!".
Par Exemple: WWW-Authenticate: Basic realm="My App"
ici le serveur dit au client qu'il utilise un schéma d'authentification nommé Basic. Le domaine n'est rien d'autre qu'une chaîne de caractères qui identifie un espace protégé sur le serveur.
sur la base de mes recherches (googling) j'ai décidé d'envoyer: newauth realm="use login token".
le site web http://greenbytes.de/tech/tc/httpauth/#unknown a des cas de test pour différentes méthodes auth et je n'ai rien trouvé qui décrit 'get auth token' et donc je pense que c'est un 'Newauth'.
également important pour moi: cela ne crée pas d'invite de connexion côté client.