2012-04-04 30 views
5

Estoy a punto de comenzar a desarrollar una aplicación de negocios donde quiero que la interfaz sea una sola página de la solución de JavaScript. El backend se proporciona como una API REST. ¿Cómo puedo acceder de forma segura a la API REST desde la interfaz de Javascript?Manera segura de consumir REST Oauth 2.0 API desde javascript

Ya comencé a desarrollar Oauth 2.0 en mi API REST y ya sé sobre el "Flujo de concesión implícito", que es el flujo recomendado para los clientes de JavaScript. El problema es que este flujo solo debería proporcionar tokens de acceso de corta duración (¿quizás 1 hora?).

Los usuarios de mi sistema generalmente inician sesión por la mañana y trabajan en la aplicación todo el día (8 horas) y cierran sesión antes de abandonar el trabajo, pero si el token de acceso solo dura una hora, deben volver a iniciar sesión cada hora que no es accesible ¿Cómo resuelves esto?

+1

Una solución que se me ocurre es que, en lugar de devolver un token de acceso que expira en 1 hora, puedo devolver un access_token con un vencimiento deslizante. Por cada llamada que el cliente realice a la API, se renovó el tiempo de caducidad con, por ejemplo, 20 minutos. ¿Pero esto se considera seguro? ¿Nunca he visto a los servidores de Oauth usar la expiración deslizante? – rgullhaug

Respuesta

5

Nosotros (Ping Identity) admitimos la expiración de tokens de acceso deslizante en nuestra implementación de OAuth AS. No hay nada de OAuth 2.0 que indique que no se puede hacer eso. Para otros tipos de subvención, se necesitaría un token de actualización para vidas más largas, pero implícito no funciona con ellos.

No estoy seguro si necesita un kit de herramientas OAuth de JavaScript, pero here's one que probablemente sea adecuado para sus propósitos.

+1

Gracias por tomarse el tiempo para responder mi pregunta. Implementaré la expiración por deslizamiento, también muchas gracias por el kit de herramientas de Javascript, lo verificaré :) Una pregunta más: en el flujo implícito, no proporcionamos un secreto de cliente (ya que no se puede mantener en secreto en el cliente), pero necesitamos saber con certeza qué cliente se está conectando a nuestro servicio, ya que diferentes clientes tendrán acceso a diferentes partes de la API. ¿Será suficiente comprobar que el redirect_uri es el mismo que el redirect_uri registrado para garantizar que estamos hablando con el cliente correcto? – rgullhaug

+1

Sí - la comparación de redirect_uri es el camino a seguir. Como dijiste, cualquier secreto que mantengas en el lado del cliente es secreto solo por tanto tiempo. –

Cuestiones relacionadas