javascript rest authentication oauth-2.0 playframework-2.2

javascript - Pasar del mecanismo de token basado en sesión al mecanismo OAuth 2.0



rest authentication (1)

Poseo una aplicación de Play Framework que actúa como un servidor back-end que proporciona un conjunto de API REST.
En el lado del cliente, poseo una aplicación AngularJS que llama a las API desde el servidor backend a través de AJAX.

Actualmente, uso una solución basada en el mecanismo Session-token.
Lo que significa que cada vez que un usuario inicia sesión con éxito, se recupera una cookie en el lado del cliente que contiene un token de autenticación.
En cada solicitud, el valor de cookie (el token de autenticación) proporcionado por la solicitud del cliente se extrae en el servidor y, si es válido, se realiza la solicitud.

Ahora quiero usar OAuth 2.0. Las razones son? :

  • Es una excelente forma estándar de proteger la API, evitando el uso de un almacén de datos (Memcached) para mantener los tokens de autenticación en el servidor, como lo estoy ofreciendo actualmente.
  • Deseo proporcionar una cookie más segura que una única cookie, proporcionando algunos client_secret y nonces para evitar algunos ataques de reproducción, etc.
  • Quiero restringir la cantidad de clientes capaces de llamar incluso la API REST pública que proporciono, es decir, API que permite llamadas anónimas, como por ejemplo enumerar una lista de elementos.

El punto es que no involucro a un tercero, ya que todos los recursos protegidos están por mi cuenta.
Me encontré con este artículo explicando cómo proteger la API REST interna con OAuth 2.0 implementando una de 2 patas en lugar de una de 3 patas como de costumbre.

Sin embargo, no puedo entender cómo el flujo de credenciales del cliente podría autenticar a un usuario específico, al llamar a una API REST que necesita tener un usuario autenticado.

De hecho, el flujo de credenciales del cliente parece estar basado en un client_id global, claves client_secret (globales para la aplicación, en mi caso, para mi aplicación Javascript) y, por lo tanto, no son lo suficientemente específicas para dirigirse a un usuario específico y controlar sus derechos específicos.

Cualquier ayuda sería genial.


Parece que debe usar "Concesión de credenciales de contraseña del propietario del recurso" ( http://tools.ietf.org/html/rfc6749#section-4.3 ). Es muy simple: ponga el ID / secreto del cliente en el encabezado Autorización y ponga el nombre de usuario / contraseña en las variables de consulta. Aquí hay un ejemplo del RFC:

POST /token HTTP/1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=password&username=johndoe&password=A3ddj3w

En el lado del servidor puede verificar tanto la validez del cliente (su aplicación de JavaScript) como del usuario. Solo recuerde que es imposible proteger las credenciales del cliente, ya que se integrará en su código JavaScript (descargable). El usuario final ingresa directamente el nombre de usuario / contraseña.