Skip to content

4 OAuth2.0

Introducción

OAuth 2.0 es un protocolo de autorización abierto que permite a los usuarios compartir información privada, como fotos o datos de contacto, con aplicaciones de terceros sin revelar sus contraseñas.

Con este tipo de autorización, se protege las contraseñas de los usuarios y además les permite controlar que información se comparte con las aplicaciones de tercero. También, es un método que permite flexibilidad ya que se puede usar en una gran cantidad de aplicaciones y plataformas, además de asegurar su compatibilidad.

El uso que se puede dar a esta autentificación puede ser:

  • Inicio de sesión único (SSO): Permite a los usuarios iniciar sesión en una aplicación con sus credenciales de otra aplicación.
  • Acceso a APIs: Permite a las aplicaciones acceder a datos de usuario de otros servicios.
  • Redes sociales: Permite a las aplicaciones compartir información con redes sociales.

Funcionamiento

El usuario inicia un proceso de autorización en una aplicación de terceros (cliente OAuth), y redirige al usuario al servidor de autorización (por ejemplo, Google, Facebook, Twitter) para que se autentique. El usuario introduce sus credenciales en el servidor de autorización y si la autenticación es correcta, el servidor de autorización envía un código de autorización al cliente OAuth. El cliente OAuth canjea el código de autorización por un token de acceso en el servidor de autorización y utiliza el token de acceso para acceder a los recursos del usuario en el servidor de recursos (por ejemplo, API de Google, API de Facebook).

Flow OAuth2

Figura 3 - Flow OAuth2

OAuth 2.0 define cuatro flujos de autorización para diferentes casos de uso:

  • Flujo de código de autorización: Este es el flujo más común y se utiliza para aplicaciones web y móviles.
  • Flujo de token de acceso implícito: Este flujo se utiliza para aplicaciones web que no pueden almacenar secretos de forma segura.
  • Flujo de contraseña de usuario: Este flujo se utiliza para aplicaciones que necesitan acceso a los datos del usuario en nombre del usuario.
  • Flujo de credenciales de cliente: Este flujo se utiliza para aplicaciones que necesitan acceder a los datos del usuario sin la intervención del usuario.

Librería

Para poder simplificar la operación de autentificación de este tipo, podemos usar la librería node-oauth2-server, un módulo independiente del marco para implementar un servidor OAuth 2 en Node.js. node-oauth2-server es de código abierto, simple y fácil de integrar con sus aplicaciones de Node, incluso si ya se han estado ejecutando por un tiempo.

En su documentación, podemos encontrar la especificación del modelo que indica, que se debe anular las funciones predeterminadas de OAuth 2 para brindar una experiencia personalizada.

const model = {
  // We support returning promises.
  getAccessToken: function() {
    return new Promise('works!');
  },

  // Or, calling a Node-style callback.
  getAuthorizationCode: function(done) {
    done(null, 'works!');
  },

  // Or, using generators.
  getClient: function*() {
    yield somethingAsync();
    return 'works!';
  },

  // Or, async/wait (using Babel).
  getUser: async function() {
    await somethingAsync();
    return 'works!';
  }
};

const OAuth2Server = require('oauth2-server');
let oauth = new OAuth2Server({model: model});

Con el objeto oauth puede anular el modelo predeterminado del servidor express.

Coming soon...