Autorización en RESTful HTTP API, 401 WWW-Authenticate


Estoy creando un servicio RESTful para proporcionar datos a una aplicación web. Tengo dos preguntas relacionadas sobre esto.

1. ¿Cómo lidiar con solicitudes no autorizadas?

Tengo la intención de responder a las solicitudes con los siguientes códigos:

  • ¿Está abierto y encontrado el recurso? 200 OK
  • ¿Necesita autenticarse para acceder a los recursos? 401 No autorizado
  • no tiene acceso a una categoría de recursos? 403 Prohibido
  • ¿Tiene acceso a una categoría de recursos, pero no a este recurso específico? 404 Not Found para evitar que las personas lleguen a conocer la existencia de un recurso al que no tienen acceso.
  • ¿No existe el recurso? 404 No encontrado

¿Es esta una forma recomendada para que un servicio reparador se comporte?

2. ¿Qué encabezado WWW-Authenticate debería proporcionar 401 responses?

Leí en Wikipedia (probablemente no el el recurso más preciso, pero funciona para mí) que una respuesta 401 debe incluir un encabezado WWW-Authenticate, sin embargo, al buscar más, realmente no pude encontrar ningún recurso que indicara lo que significa este valor y lo que debería ser.

Encontré varias preguntas y temas del foro sobre este encabezado y todos parecen ser sobre OAuth, sugieren en contra del uso de códigos de estado 401 o dicen que puedes inventar algo.

¿Cuál es el valor correcto que debe contener este encabezado?

Author: Aidiakapi, 2013-07-17

2 answers

Para responder a sus preguntas:

¿Cómo lidiar con solicitudes no autorizadas?

La forma en que lo describiste es más o menos la forma recomendada para un servicio RESTful. Por lo que puedo ver, no hay absolutamente nada malo en eso.

¿Qué encabezado WWW-Authenticate debería proporcionar 401 responses?

En general, el encabezado WWW-Authenticate le dice al cliente qué tipo de autenticación aceptará el servidor. Si el cliente hace una solicitud no autorizada, lo que significa está enviando una solicitud con un encabezado Authorization ausente o no válido, el servidor usará WWW-Authenticate para decirle al cliente qué esquema de autenticación aceptará (es decir, Basic, Digest u OAuth) y para qué reino.

Imagínelo como algún tipo de pregunta de identificación o desafío por parte del servidor, es decir, algo como "¿Quién es usted?"o" Demostrar quién es usted proporcionando credenciales de la siguiente manera!".

Por Ejemplo: WWW-Authenticate: Basic realm="My App"

Aquí el servidor le dice al cliente que usa un esquema de autenticación llamado Basic. El reino no es más que una cadena que identifica un espacio protegido en el servidor.

 20
Author: benjiman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-16 22:37:25

Basado en mi investigación (googlear) decidí enviar: Newauth realm="use login token".

El sitio web http://greenbytes.de/tech/tc/httpauth/#unknown tiene casos de prueba para diferentes métodos de autenticación y no he encontrado nada que describa 'get auth token' y por lo tanto creo que es un 'Newauth'.

También es importante para mí: Esto no crea un mensaje de inicio de sesión en el lado del cliente.

 0
Author: sigi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-23 10:41:17