2009-02-13 10 views
7

Esta pregunta se me ocurrió después de leer este post: “Common REST Mistakes: Sessions are irrelevant”Licencias y sesiones de la forma en REST

Si las sesiones son de hecho desalienta en una aplicación REST. ¿Cómo manejarías las licencias en dicha aplicación? Me refiero específicamente al modelo de licencias simultáneas y licencias no nombradas. es decir, el cliente compra licencias X, lo que significa que la aplicación puede permitir que hasta X usuarios inicien sesión simultáneamente. Lo que significa que la aplicación debe mantener un estado para los usuarios que inician sesión actualmente.

sé que puedo crear un recurso llamado licencias, que establecerá una cookie o generar un identificador único, y luego el cliente tendrá que enviar con cada petición. Pero es lo mismo que crear una sesión, ¿verdad?

Si voy a adoptar el enfoque sin estado y pedir al cliente para crear un token de autenticación para cada solicitud de la forma en que la aplicación saber cuándo hay que consumir y liberar la licencia para ese cliente?

¿Existe una alternativa? específicamente una alternativa más RESTful?

Respuesta

4

Vamos a tratar de conectar los puntos para usted, suponiendo que interpretaba bien su pregunta. El enlace que publicó tiene una respuesta válida, cada solicitud debe usar una autenticación HTTP. Si necesita el concepto de licencias para mantener un cierto estado para su usuario, lo más probable es que lo vincule con el usuario. Usted tiene un nombre de usuario (verificado) para usar. Solo necesita invocar ese controlador para cada solicitud y guardar su estado. Ahí tienes tu sesión.

de entrada de la galleta nunca debe ser de confianza para cualquier información crítica, pero puede ser muy útil para la verificación extra, como un token de seguridad. Creo que agregar un campo de token de seguridad aleatorio a sus enlaces en el sitio sería el enfoque más relajado para eso. Debería caducar con la 'sesión', por supuesto.

+1

¿Cuándo invocaré la licencia de versión? para permitir que otro usuario inicie sesión No deseo que la licencia se consuma solo durante los milisegundos que la solicitud se está procesando realmente en el servidor, pero durante todo el tiempo que el usuario está activo. – LiorH

+0

Es por eso que debe guardar el estado. La sesión/licencia debe destruirse cuando el usuario hace clic en un enlace de cierre de sesión o después de un tiempo de espera. (Que puede ser un campo en la tabla de la base de datos, como una marca de tiempo last_login que se actualizará a la marca de tiempo actual para solicitudes válidas.) –

+0

@Aram Verstegen, dijo que es por eso que debería guardar el estado, pero si salva el estado, ¿eso no viola los principios de REST? –

1

Es posible que desee considerar empujando los problemas de manejo de licencia abajo de la pila de la infraestructura de una sola planta. Algo así como un enfoque de Programación Orientada a Aspectos (AOP), si lo desea. En lugar de manejarlo en el nivel de aplicación, quizás, puede insertarlo en el nivel del servidor web.

Sin conocer los detalles de su infraestructura, es difícil dar una recomendación específica. Usando la plataforma * nix como ejemplo, la lógica de manejo de licencias se puede implementar como un módulo para el servidor HTTP Apache.

Este enfoque promueve una separación de intereses a través de su plataforma de infraestructura. Permite que cada capa se centre en lo que se supone que debe hacer. La capa de aplicación no necesita preocuparse por la licencia en absoluto, lo que le permite centrarse estrictamente en el contenido, lo que a su vez mantiene la URL limpia y "RESTful".

1

Si el otorgamiento de licencias se basa en usuarios al mismo tiempo, la implementación de HTTP Digest es trivial, y le permitirá habilitar sólo el número máximo de conexiones simultáneas. Digest tiene una provisión para pasar los datos de caducidad para que su sesión pueda ser agotada.

estado de autenticación es asimiento por http authetnication y en ninguna otra parte, beause es transparente y ubiquituous.

0

Quizás una manera más tranquila de hacer las licencias sería limitar la velocidad a la que se manejan las solicitudes, más que el número de sesiones simultáneas. Lleve un registro del número de solicitudes en la última hora, y si excede el número que el cliente pagó, responda 503 Service Unavailable, junto con algún texto que sugiera que el usuario intente de nuevo más tarde.

Cuestiones relacionadas