Ésta es una cuestión conceptual.
Tengo una aplicación cliente (móvil) que debe admitir una acción de inicio de sesión contra un servicio web RESTful. Debido a que el servicio web es RESTful, esto equivale a que el cliente acepte un nombre de usuario / contraseña del usuario, verifique ese nombre de usuario / contraseña con el servicio y luego recuerde enviar ese nombre de usuario / contraseña con todas las solicitudes posteriores.
Todas las demás respuestas de este servicio web se proporcionan en formato JSON.
La pregunta es, cuando consulto el servicio web simplemente para averiguar si un nombre de usuario / contraseña dado son válidos, si el servicio web siempre responde con datos JSON diciéndome que es exitoso o no exitoso, o debe devolver HTTP 200 con buenas credenciales y HTTP 401 con credenciales incorrectas.
La razón por la que pregunto es que algunos otros servicios RESTful usan 401 para credenciales incorrectas, incluso cuando solo pregunta si las credenciales son válidas. Sin embargo, mi entendimiento de las respuestas 401 es que representan un recurso al que se supone que no debes tener acceso sin credenciales válidas. Pero el recurso de inicio de sesión DEBE ser accesible para cualquier persona porque el propósito completo del recurso de inicio de sesión es informarle si sus credenciales son válidas.
Dicho de otra manera, me parece que una solicitud como:
myservice.com/this/is/a/user/action
debe devolver 401 si se proporcionan credenciales incorrectas. Pero una solicitud como:
myservice.com/are/these/credentials/valid
nunca debe devolver 401 porque esa URL en particular (solicitud) está autorizada con o sin credenciales válidas.
Me gustaría escuchar algunas opiniones justificadas de una forma u otra sobre esto. ¿Cuál es la forma estándar de manejar esto y es la forma estándar de manejar esto lógicamente apropiada?
authentication is required and has failed or has not yet been provided
aplica, ya que no solicita la validez de las credenciales, sino un recurso específico basado en las credenciales que proporciona.401 debe enviarse solo cuando la solicitud necesita un campo de encabezado de autorización y la autorización falla. Dado que la API de inicio de sesión no requiere autorización, 401 es el código de error incorrecto en mi opinión
Según el estándar aquí https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
* 10.4.2 401 no autorizado
La solicitud requiere autenticación de usuario. La respuesta DEBE incluir un campo de encabezado WWW-Authenticate (sección 14.47) que contenga un desafío aplicable al recurso solicitado. El cliente PUEDE repetir la solicitud con un campo de encabezado de autorización adecuado (sección 14.8). Si la solicitud ya incluía credenciales de autorización, entonces la respuesta 401 indica que se ha rechazado la autorización para esas credenciales. Si la respuesta 401 contiene el mismo desafío que la respuesta anterior, y el agente de usuario ya ha intentado la autenticación al menos una vez, entonces se DEBE presentar al usuario la entidad que se le dio en la respuesta, ya que esa entidad podría incluir información de diagnóstico relevante. La autenticación de acceso HTTP se explica en "Autenticación HTTP: autenticación de acceso básica y implícita" [43]. *
fuente
Devuelve 409 con un mensaje de error adecuado.
fuente