Hay muchas preguntas (y respuestas) excelentes en S.O. sobre el tema de REST y seguridad. Muchos dicen "a los puristas no les gustará esto, pero bla, bla" ... y luego otros dicen "nunca deberías hacer eso, porque bla, bla".Ejemplos prácticos de autorización de un servicio RESTful?
Pero no he visto la solución que los "puristas" sugieren en la siguiente situación. Entonces mi pregunta es: ¿cuáles son las "soluciones RESTful puras" para el siguiente escenario?
El escenario simple ...
imaginar la construcción de una base de datos/sitio web que permite al usuario gestionar sus recetas favoritas. El sitio web expone una API RESTful para que los usuarios puedan consultar y manipular su lista desde un programa personalizado que desean escribir (que utiliza esta API).
Por lo tanto, el usuario "A" tiene 3 recetas favoritas con el ID "1", "2" y "3".
El usuario "B" tiene 2 recetas favoritas con el ID "4" y "5".
Tenemos que asegurarnos de que si el usuario A envía un comando DELETE
al /Recipes/4
, obtendrá una respuesta Forbidden (403)
.
lo que normalmente lo haría ...
Lo que haría normalmente es dar a ellos primero llaman a un método de autenticación, y los envían algún tipo de auth-token que es válido por 30 minutos más o menos. Normalmente, este token se pasa a través de una cookie.
¿Cuál es la solución pura?
¿Es la solución REST pura tener que pasarlo como una variable en la cadena de consulta? Are cookies the devil? ¿Debería el token ser utilizado como un segmento de la URL (a diferencia de un parámetro de cadena de consulta)? ¿Hay algo más que responda esta pregunta con claridad?
Un poco pedantico aquí: Creo que en su caso querría dar un 403, no un 401. La autenticación es con un servicio, pero en su caso el usuario A está _ prohibido_ obtener la receta 4. Sé que no Responde la pregunta exactamente, pero vale la pena señalar. http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html muestra la diferencia. (La reautenticación no ayudará al usuario A a ver la receta 4, de ahí el 403.) –
Correcto - en realidad cualquiera de los dos es un problema ... primero 401 - como en, ¿está autorizado y luego en 403? - como en, ¿cuáles son sus "permisos"? "- que entra en debates de estado/sesión/usuario-contexto ... de cualquier manera, la pregunta permanece. ¡Gracias por la aclaración! –
Sí, ambos son importantes. La solución más simple es, por supuesto, auth básica sobre https. Creo que eso es "puro". ¿Estás buscando alternativas? –