El diseño basado en principios de la arquitectura web moderna de Roy T. Fielding y Richard N. Taylor , es decir, la secuencia de trabajos de toda la terminología REST, contiene una definición de interacción cliente-servidor:
Todas las interacciones REST son apátridas . Es decir, cada solicitud contiene toda la información necesaria para que un conector comprenda la solicitud, independientemente de cualquier solicitud que pueda haberla precedido .
Esta restricción cumple cuatro funciones, la primera y la tercera son importantes en este caso particular:
- Primero : elimina cualquier necesidad de que los conectores retengan el estado de la aplicación entre solicitudes , lo que reduce el consumo de recursos físicos y mejora la escalabilidad;
- 3 ° : permite que un intermediario vea y comprenda una solicitud de forma aislada , lo que puede ser necesario cuando los servicios se reorganizan dinámicamente;
Y ahora volvamos a su caso de seguridad. Cada solicitud debe contener toda la información requerida, y la autorización / autenticación no es una excepción. ¿Cómo lograr esto? Literalmente envíe toda la información requerida por cable con cada solicitud.
Uno de los ejemplos de cómo archivar esto es el código de autenticación de mensaje basado en hash o HMAC . En la práctica, esto significa agregar un código hash del mensaje actual a cada solicitud. Código hash calculado mediante la función hash criptográfica en combinación con una clave criptográfica secreta . La función hash criptográfica está predefinida o es parte de la concepción REST de código a pedido (por ejemplo, JavaScript). La clave criptográfica secreta debe ser proporcionada por el servidor al cliente como recurso, y el cliente la usa para calcular el código hash para cada solicitud.
Hay muchos ejemplos de implementaciones de HMAC , pero me gustaría que preste atención a los siguientes tres:
Cómo funciona en la práctica
Si el cliente conoce la clave secreta, está listo para operar con recursos. De lo contrario, será redirigido temporalmente (código de estado 307 Redirección temporal) para autorizar y obtener una clave secreta, y luego redirigido de nuevo al recurso original. En este caso, no es necesario saber de antemano (es decir, codificar en alguna parte) cuál es la URL para autorizar al cliente , y es posible ajustar este esquema con el tiempo.
Espero que esto te ayude a encontrar la solución adecuada.