http - guia - Error de inicio de sesión RESTful: devolución 401 o respuesta personalizada
qgis manual (1)
Esta es una pregunta conceptual.
Tengo una aplicación cliente (móvil) que necesita 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, verificando ese nombre de usuario / contraseña con el servicio, y luego simplemente recuerda enviar ese nombre de usuario / contraseña con todas las solicitudes posteriores.
Todas las otras respuestas en este servicio web se proporcionan en formato JSON.
La pregunta es, cuando consulto el servicio web simplemente para saber si un nombre de usuario / contraseña dados son válidos, si el servicio web siempre responde con datos JSON que me dicen que fue exitoso o no, o debería devolver HTTP 200 con buenas credenciales y HTTP. 401 en malas credenciales.
La razón por la que pregunto es que algunos otros servicios RESTful usan 401 para credenciales erróneas, incluso cuando usted solo pregunta si las credenciales son válidas. Sin embargo, mi comprensión de las 401 respuestas es que representan un recurso al que se supone que no debe tener acceso sin credenciales válidas. Pero el recurso de inicio de sesión DEBE estar accesible para cualquier persona porque el propósito completo del recurso de inicio de sesión es decirle 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 (solicitud) en particular está autorizada con o sin credenciales válidas.
Me gustaría escuchar opiniones justificadas de una manera 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 apropiado?
Antes que nada. 401 es el código de respuesta adecuado para enviar cuando ha ocurrido un inicio de sesión fallido.
401 No autorizado Similar a 403 Prohibido, pero específicamente para uso cuando se requiere autenticación y ha fallado o aún no se ha proporcionado. La respuesta debe incluir un campo de encabezado WWW-Authenticate que contenga un desafío aplicable al recurso solicitado.
Tu confusión acerca de, myservice.com/are/these/credentials/valid
enviando de vuelta 401 cuando solo haces una verificación, creo que se basa en el hecho de que hacer solicitudes booleanas en REST a menudo es incorrecto por las restricciones RESTful. Cada solicitud debe devolver un recurso. Hacer preguntas booleanas en un servicio RESTful es una balandra resbaladiza hasta RPC.
Ahora no sé cómo se comportan los servicios que buscabas. Pero una buena forma de resolver esto es tener algo así como un objeto de Cuenta, que intentas OBTENER. Si sus credenciales son correctas, obtendrá el objeto Account, si no quiere perder ancho de banda solo para hacer una "comprobación", puede hacer HEAD con el mismo recurso.
Un objeto de cuenta también es un buen lugar para almacenar todos esos molestos valores booleanos que de otra manera serían difíciles de crear recursos individuales.