Saltar al contenido

Proveedor de Seguridad: OAuth

El proveedor de seguridad de OAuth se integra con aplicaciones de externo mediante el flujo de concesión del código de autorización de OAuth 2.0, tal como se documenta en el estándar OAuth 2.0: https://tools.ietf.org/html/rfc6749

En este flujo, Vinyl redirige el agente de usuario al servidor de autorización. Una vez que el usuario haya iniciado sesión exitosamente en el servidor de autorización y haya aprobado la solicitud de autorización, el agente de usuario es redirigido nuevamente a Vinyl. La redirección incluye un código de autorización. Vinyl realiza una solicitud de canal secundario al servidor de autorización, intercambiando el código de autorización por un token de acceso. El token de acceso se puede utilizar para autorizar solicitudes a servicios web.

En sí mismo, OAuth proporciona autorización, no autenticación. Por lo tanto, los proveedores de seguridad de OAuth no se suelen utilizar como proveedores de autenticación externos: se utilizan para autorizar solicitudes a un proveedor de datos compatible, como OData o REST. Sin embargo, si el proveedor de seguridad de OAuth publica un extremo que proporciona la identidad del usuario, el proveedor de seguridad de OAuth se puede utilizar como proveedor de autenticación externo. Consulte UserInfoEndpoint para obtener detalles adicionales.

Si la solicitud del token de acceso incluye un token de actualización, Vinyl intentará automáticamente utilizar el token de actualización para adquirir un nuevo token de acceso después de recibir una respuesta 401 no autorizada.

Configurar OAuth

Vinyl es compatible con el marco de autorización OAuth 2.0 (https://tools.ietf.org/html/rfc6749). Específicamente, el proveedor de seguridad OAuth de Vinyl puede trabajar en conjunto con los proveedores de seguridad HTTP y OData para autorizar el acceso a recursos REST y OData mediante el flujo de código de autorización (https://tools.ietf.org/html/rfc6749#section-1.3.1). En este flujo, Vinyl asume el rol de "cliente", delegando la autenticación a un servidor de autorización OAuth.

Autenticación Versus Autorización

A diferencia de la mayoría de los demás proveedores de seguridad, el proveedor de seguridad OAuth es un proveedor de autorización. OAuth, por sí solo, no identifica a un usuario. En cambio, el proceso de inicio de sesión de OAuth genera un token que se puede utilizar para acceder a los recursos en nombre de un usuario. En consecuencia, normalmente no se puede utilizar OAuth para autenticar usuarios. En cambio, se utiliza para extender la autorización de un usuario autenticado.

En términos prácticos, esto significa que un proveedor de seguridad OAuth no puede presentarse como una opción de inicio de sesión en el formulario de inicio de sesión (es decir, Mostrar en el formulario de inicio de sesión). En su lugar, se pedirá a los usuarios que inicien sesión con el proveedor de seguridad de OAuth cuando intenten acceder a un recurso (REST u OData) que requiera una autorización de OAuth. En este escenario, Vinyl lanzará un "desafío". El cliente web interceptará el desafío y redirigirá el navegador al formulario de inicio de sesión. Sin embargo, si Redirect On Challenge está habilitado, el cliente web omitirá el formulario de inicio de sesión y redirigirá al usuario al proveedor de OAuth.

Sin embargo, tenga en cuenta que algunos proveedores han ampliado el protocolo OAuth para incluir la autenticación. Normalmente, esto se logra publicando un extremo separado que identifica al usuario. Aunque no forma parte del estándar OAuth, Vinyl admite estos protocolos de autenticación siempre que el extremo cumpla con varios requisitos. Consulte la documentación del proveedor de seguridad de OAuth para obtener información adicional.

Integración con Proveedores de OAuth

Muchos servicios en la nube y APIs son compatibles con OAuth 2.0. Los pasos para instalar y configurar OAuth varían según el proveedor. Sin embargo, el procedimiento fundamental es el mismo.

  1. Determine el URI de redireccionamiento.
  2. Registre Vinyl como aplicación cliente con el proveedor de OAuth.
  3. Cree el proveedor de OAuth dentro de Vinyl.
  4. Cree un proveedor de autenticación de fuente de datos (HTTP u OData) dentro de Vinyl.
  5. Cree un servidor de origen de datos (REST u OData) que utilice el proveedor de autenticación de origen de datos.

Determinar el URI de Redireccionamiento

El extremo de autorización de OAuth (https://tools.ietf.org/html/rfc6749#section-4.1.1) define un parámetro de redirección_uri (https://tools.ietf.org/html/rfc6749#section-3.1.2). A veces esto se denomina URL de "devolución de llamada". El redirección_uri está definido por Vinyl. Es una URL absoluta a la que se redirigirá a los usuarios después de iniciar sesión con el proveedor de OAuth.

Un redirección_uri se verá así:

https://example.com/Vinyl/signin-Acme

Este ejemplo supone que Vinyl está alojado en la siguiente URL:

https://example.com/Vinyl/

Nota

Muchos proveedores de OAuth requieren redirección_uri para utilizar el esquema https.

El resto de redirigir_uri toma la siguiente forma:

signin-<provider-name>

Dónde <provider-name> es el nombre del proveedor de seguridad de Vinyl. En el ejemplo anterior, el nombre del proveedor es Acme. Tenga en cuenta que el nombre debe estar codificado en URL según RFC 3986 (https://tools.ietf.org/html/rfc3986).

Por lo tanto, para determinar el redirección_uri, necesitará saber lo siguiente:

  • La URL raíz del Vinyl.
  • El nombre del proveedor de seguridad.

Nota

Aunque el estándar OAuth indica que el parámetro redirección_uri es opcional, Vinyl siempre incluirá el parámetro redirección_uri en la solicitud de autorización. No hay forma de desactivar esto.

Registre Vinyl Como Aplicación Cliente con el Proveedor de OAuth

Como se señaló anteriormente, Vinyl es un cliente de OAuth. Los clientes de OAuth deben estar registrados previamente en el servidor de autorización. El procedimiento varía según el proveedor.

Dicho esto, el proceso de registro requerirá el redireccionamiento_uri. Una vez que se complete el registro, el proveedor de OAuth proporcionará valores para los siguientes parámetros de OAuth:

  • client_id: el parámetro client_id identifica al cliente Vinyl.
  • client_secret: client_secret se utiliza para autenticar solicitudes de token de acceso.
  • alcance: el parámetro de alcance se utiliza para limitar la autorización. El parámetro de alcance es opcional y, a menudo, no se utiliza.

Nota

El estándar OAuth define el parámetro client_secret como parte de la concesión de contraseña del cliente (https://tools.ietf.org/html/rfc6749#section-2.3.1). Sin embargo, el estándar no incluye client_secret como parte del flujo del Código de autorización. De todos modos, la mayoría de los proveedores de OAuth requieren client_secret en la práctica. Por lo tanto, Vinyl requiere client_secret.

Algunos proveedores de OAuth requieren autenticación de cliente adicional. Por ejemplo, algunos proveedores protegen el extremo del token de acceso mediante la autenticación HTTP básica. Vinyl admite cualquier mecanismo de autenticación de cliente más allá del client_secret.

Además de los parámetros OAuth antes mencionados, Vinyl requerirá los siguientes extremos:

  • extremo de autorización: Vinyl redirigirá los agentes de usuario al extremo de autorización. Ejemplo: http://example.com/oauth/authorize
  • extremo del token: Vinyl realizará una solicitud de canal secundario al extremo del token para intercambiar un código de autorización por un token de acceso. Ejemplo: http://example.com/oauth/token

Normalmente, estos extremos no son específicos del cliente y se pueden encontrar en la documentación del proveedor de OAuth.

Cree el Proveedor de OAuth Dentro de Vinyl

Para crear un proveedor de OAuth, comience iniciando sesión en Vinyl como administrador.

  1. Navegue hasta el Centro de control
  2. Haga clic en el botón Proveedores de seguridad
  3. En el panel Autenticación de origen de datos, haga clic en el botón Crear.
  4. Proporcione lo siguiente:

    • Nombre: {Nombre del proveedor de OAuth}

      Ejemplo: Acme

    • Tipo: OAuth

    • Prioridad: un número entero único entre 10 y 100. Tenga en cuenta que este valor debe ser único.

      Ejemplo: 50

    • Habilitado: Verificar

  5. Haga clic en el botón Guardar

  6. Establezca las siguientes propiedades. En el panel Propiedades, haga clic en el botón Crear → Seleccione el parámetro → Proporcione el valor → Haga clic en el icono Guardar.

    • AuthorizationEndpoint: el URI del extremo de autorización proporcionado por el proveedor de OAuth.

      Example: http://example.com/oauth/authorize

    • TokenEndpoint: el URI del extremo del token proporcionado por el proveedor de OAuth.

      Example: http://example.com/oauth/token

    • ClientId: el parámetro client_id proporcionado por el proveedor de OAuth.

    • ClientSecret: el parámetro client_secret proporcionado por el proveedor de OAuth.

Cree un Proveedor de Autenticación de Fuente de Datos (http U OData) Dentro de Vinyl

Para crear un proveedor de autenticación de fuente de datos, comience iniciando sesión en Vinyl como administrador.

  1. Navegue hasta el Centro de control
  2. Haga clic en el botón Proveedores de seguridad
  3. En el panel Autenticación de origen de datos, haga clic en el botón Crear.
  4. Proporcione lo siguiente:

    • Nombre: {Nombre del proveedor de fuente de datos}

      Ejemplo: AcmeDS

    • Tipo: HTTP u OData

    • Prioridad: un número entero único entre 10 y 100. Tenga en cuenta que este valor debe ser único.

      Ejemplo: 60

    • Habilitado: Verificar

  5. Haga clic en el botón Guardar

  6. Establezca las siguientes propiedades. En el panel Propiedades, haga clic en el botón Crear → Seleccione el Parámetro → Proporcione el Valor → Haga clic en el icono Guardar.

  7. Tipo de autenticación: Código de autorización

  8. OAuthProvider: {Nombre del proveedor de OAuth}

    Ejemplo: Acme

Cree un servidor de origen de datos (REST u OData) que utilice el proveedor de autenticación de origen de datos.

Instalar y configurar un servidor de origen de datos está más allá del alcance de este documento. Consulte ejemplos específicos para obtener más información.

Subvenciones OAuth 2.0

Flujo de Código de Autorización (delegado)

El flujo del Código de autorización de OAuth 2.0 proporciona autenticación a nivel de usuario. En este flujo, los códigos de autorización se intercambian por tokens de acceso de OAuth. El flujo del Código de autorización de OAuth 2.0 está estandarizado en RFC 6749.

A diferencia de los esquemas de autenticación Anónimo y HTTP Básico, el flujo del Código de autorización debe habilitarse explícitamente. Esto se hace asociando una fuente de datos con un proveedor de seguridad OData que tiene un tipo de autenticación de "Código de autorización".

Además, el flujo del código de autorización de OAuth funciona en conjunto con un proveedor de seguridad de OAuth. El proveedor de seguridad OAuth es responsable de autorizar al usuario e intercambiar códigos de autorización por tokens de acceso.

Configuración

Parámetros

Los siguientes parámetros habilitan y configuran el flujo del código de autorización OAuth 2.0:

Parámetro Valor Descripción
Tipo de autenticación Código de autorización Indica que la fuente de datos debe utilizar el flujo del Código de autorización de OAuth.
Proveedor de OAuth Nombre del proveedor de seguridad Vinyl OAuth que autorizará al usuario.
Ignorar TlsErrors Indica que Vinyl debe ignorar los errores de validación del certificado HTTPS. Esta opción solo debe habilitarse durante el desarrollo.

Flujo de Credenciales de Cliente

El flujo de credenciales de cliente de OAuth 2.0 proporciona autenticación a nivel de cliente, similar a una cuenta de servicio. En este flujo, las credenciales del cliente OAuth se intercambian por un token de acceso OAuth. El flujo de credenciales de cliente OAuth 2.0 está estandarizado en RFC 6749.

Configuración

Parámetros

Los siguientes parámetros habilitan y configuran el flujo de credenciales de cliente OAuth 2.0:

Parámetro Valor Descripción
Tipo de autenticación Credenciales de cliente Indica que la fuente de datos debe utilizar el flujo de credenciales de cliente de OAuth.
Tipo de autenticación de cliente Determina el esquema de autenticación del cliente OAuth 2.0. Las opciones incluyen:
  • None - Indica que el cliente no debe ser autenticado.
  • Basic - Indica que se utilizará el esquema de Contraseña del Cliente. Las credenciales se proporcionarán mediante autenticación HTTP básica.
  • Parameter - Indica que se utilizará el esquema de Contraseña del Cliente. Las credenciales se proporcionarán como parámetros en el cuerpo de la solicitud.
La autenticación del cliente OAuth se describe en RFC 6749 Sección 2.3.
ID de cliente El identificador del cliente OAuth definido por el sistema de externo.
Secreto del cliente El secreto del cliente OAuth según lo definido por el sistema de externo.
Punto final del token El extremo del token de OAuth (por ejemplo, http://example.com/oauth/token )
Parámetros de punto final de token Parámetros pasados al extremo del token de OAuth. De forma predeterminada, Vinyl generará los parámetros apropiados según el flujo de OAuth. Utilice esta configuración únicamente para APIs de OAuth no conformes o no compatibles. Los parámetros deben especificarse en formato codificado de URL del formulario (application/x-www-form-urlencoded).

Si la lista de parámetros comienza con un signo comercial (&), los parámetros se fusionarán con los parámetros generados. Si un parámetro tiene el mismo nombre que un parámetro generado, el parámetro generado se sobrescribirá. Si un parámetro proporcionado no tiene un valor, p. &grant_type&username=user&password=password, se eliminará el parámetro generado. De lo contrario, el parámetro proporcionado se agrega a los parámetros generados.

La lista de parámetros admite la interpolación de cadenas. Las expresiones pueden hacer referencia a parámetros dinámicos, por ejemplo username={{ client_id}}&password={{ client_secret }}. Esto resulta útil cuando se integra con APIs de externo que no utilizan nombres de parámetros estándar.
Alcances Lista de alcances de OAuth delimitados por espacios o saltos de línea. Opcional.
Ignorar TlsErrors Indica que Vinyl debe ignorar los errores de validación del certificado HTTPS. Esta opción solo debe habilitarse durante el desarrollo.

Flujo de Tokens Portadores de Tokens Web JSON

El flujo del token de portador del token web JSON (JWT) de OAuth 2.0 proporciona autenticación a nivel de usuario. En este flujo, los JWT se intercambian por tokens de acceso de OAuth. El flujo del token portador JWT de OAuth 2.0 está estandarizado en RFC 7523.

Configuración

Parámetros

Los siguientes parámetros habilitan y configuran el flujo del token de portador JWT de OAuth 2.0:

Parámetro Valor Descripción
Tipo de autenticación Jwt Indica que la fuente de datos debe utilizar el flujo de token de portador OAuth JWT.
Tipo de autenticación de cliente Determina el esquema de autenticación del cliente OAuth 2.0. Las opciones incluyen:
  • None - Indica que el cliente no debe ser autenticado.
  • Basic - Indica que se utilizará el esquema de Contraseña del Cliente. Las credenciales se proporcionarán mediante autenticación HTTP básica.
  • Parameter - Indica que se utilizará el esquema de Contraseña del Cliente. Las credenciales se proporcionarán como parámetros en el cuerpo de la solicitud.
La autenticación del cliente OAuth se describe en RFC 6749 Sección 2.3.
ID de cliente El identificador del cliente OAuth definido por el sistema de externo.
Secreto del cliente El secreto del cliente OAuth según lo definido por el sistema de externo.
Punto final del token El extremo del token de OAuth (por ejemplo, http://example.com/oauth/token )
Parámetros de punto final de token Parámetros pasados al extremo del token de OAuth. De forma predeterminada, Vinyl generará los parámetros apropiados según el flujo de OAuth. Utilice esta configuración únicamente para APIs de OAuth no conformes o no compatibles. Los parámetros deben especificarse en formato codificado de URL del formulario (application/x-www-form-urlencoded).

Si la lista de parámetros comienza con un signo comercial (&), los parámetros se fusionarán con los parámetros generados. Si un parámetro tiene el mismo nombre que un parámetro generado, el parámetro generado se sobrescribirá. Si un parámetro proporcionado no tiene un valor, p. &grant_type&username=user&password=password, se eliminará el parámetro generado. De lo contrario, el parámetro proporcionado se agrega a los parámetros generados.

La lista de parámetros admite la interpolación de cadenas. Las expresiones pueden hacer referencia a parámetros dinámicos, por ejemplo username={{ client_id}}&password={{ client_secret }}. Esto resulta útil cuando se integra con APIs de externo que no utilizan nombres de parámetros estándar.
Alcances Lista de alcances de OAuth delimitados por espacios o saltos de línea. Opcional.
Emisor Reclamación del emisor JWT (https://tools.ietf.org/html/rfc7523#section-3). El valor predeterminado es ClientId.
Asunto Reclamación del sujeto JWT (https://tools.ietf.org/html/rfc7523#section-3). Si el parámetro AccessTokenOwner es Usuario, el valor predeterminado es la identidad del usuario actual. Si el parámetro AccessTokenOwner es Cliente, el Asunto es obligatorio.
Audiencia Reclamación de audiencia de JWT (https://tools.ietf.org/html/rfc7523#section-3). El valor predeterminado es TokenEndpoint.
Propietario del token de acceso Indica si los tokens de acceso de OAuth se emiten a usuarios o clientes individuales. Las opciones incluyen:
  • Usuario
  • Cliente
El valor predeterminado es Usuario.
Certificado de firma Clave privada RSA PKCS #1 codificada en PEM. Tomará el siguiente formato.
-----COMENZAR CLAVE PRIVADA RSA-----
... clave codificada en base64...
-----TERMINAR CLAVE PRIVADA RSA-----
Algoritmo de firma Parámetro del algoritmo JWT (https://tools.ietf.org/html/rfc7518#section-3.1). El único algoritmo admitido es RS256.
Ignorar TlsErrors Indica que Vinyl debe ignorar los errores de validación del certificado HTTPS. Esta opción solo debe habilitarse durante el desarrollo.

Flujo de Credenciales de Contraseña del Propietario del Recurso

El flujo de credenciales de contraseña del propietario del recurso se define en RFC 6749. Sin embargo, desde entonces el flujo ha quedado obsoleto.

NO DEBE utilizarse la concesión de credenciales de contraseña del propietario del recurso.

Tal como se concibió originalmente, la concesión de credenciales de contraseña de propietario de recursos de OAuth 2.0 proporciona autorización a nivel de usuario. El usuario proporciona su nombre de usuario y contraseña a un cliente de confianza. El cliente de confianza intercambia las credenciales por un token de acceso.

Vinyl proporciona soporte parcial para el flujo de credenciales de contraseña del propietario de recursos de OAuth 2.0. Vinyl no solicita al usuario sus credenciales. En cambio, se utiliza un único conjunto de credenciales para autorizar a todos los usuarios. De esta forma, es funcionalmente equivalente a una cuenta de servicio.

Configuración

Parámetros

Los siguientes parámetros habilitan y configuran el flujo de credenciales de contraseña del propietario de recursos de OAuth 2.0:

Parámetro Valor Descripción
Tipo de autenticación RecursoPropietarioContraseñaCredenciales Indica que la fuente de datos debe utilizar el flujo de credenciales de contraseña del propietario del recurso de OAuth.
Tipo de autenticación de cliente Determina el esquema de autenticación del cliente OAuth 2.0. Las opciones incluyen:
  • None - Indica que el cliente no debe ser autenticado.
  • Basic - Indica que se utilizará el esquema de Contraseña del Cliente. Las credenciales se proporcionarán mediante autenticación HTTP básica.
  • Parameter - Indica que se utilizará el esquema de Contraseña del Cliente. Las credenciales se proporcionarán como parámetros en el cuerpo de la solicitud.
La autenticación del cliente OAuth se describe en RFC 6749 Sección 2.3.
ID de cliente El identificador del cliente OAuth definido por el sistema de externo.
Secreto del cliente El secreto del cliente OAuth según lo definido por el sistema de externo.
Nombre de usuario del propietario del recurso El nombre de usuario del propietario del recurso.
Contraseña del propietario del recurso La contraseña del propietario del recurso.
Alcances Lista de alcances de OAuth delimitados por espacios o saltos de línea. Opcional.
Punto final del token El extremo del token de OAuth (por ejemplo, http://example.com/oauth/token )
Parámetros de punto final de token Parámetros pasados al extremo del token de OAuth. De forma predeterminada, Vinyl generará los parámetros apropiados según el flujo de OAuth. Utilice esta configuración únicamente para APIs de OAuth no conformes o no compatibles. Los parámetros deben especificarse en formato codificado de URL (application/x-www-form-urlencoded).
Si la lista de parámetros comienza con un signo comercial (&), los parámetros se fusionarán con los parámetros generados. Si un parámetro tiene el mismo nombre que un parámetro generado, el parámetro generado se sobrescribirá. Si un parámetro proporcionado no tiene un valor, por ejemplo, &grant_type&username=user&password=contraseña, el parámetro generado se eliminará. De lo contrario, el parámetro proporcionado se agrega a los parámetros generados.
La lista de parámetros admite la interpolación de cadenas. Las expresiones pueden hacer referencia a parámetros dinámicos, por ejemplo, nombre de usuario ={{ client_id }}&contraseña={{ client_secret }}. Esto resulta útil cuando se integra con APIs de externo que no utilizan nombres de parámetros estándar.

Flujo de Afirmación de Portador de SAML 2.0

El flujo de aserción de portador de OAuth 2.0 SAML 2.0 proporciona autenticación a nivel de usuario. En este flujo, las afirmaciones SAML se intercambian por tokens de acceso OAuth. El flujo de aserción de portador de OAuth 2.0 SAML 2.0 está estandarizado en RFC 7522.

Configuración

Parámetros

Los siguientes parámetros habilitan y configuran el flujo de aserción de portador de OAuth 2.0 SAML 2.0:

Parámetro Valor Descripción
Tipo de autenticación Saml Indica que la fuente de datos debe utilizar el flujo de aserción de portador de OAuth SAML 2.0.
Tipo de autenticación de cliente Determina el esquema de autenticación del cliente OAuth 2.0. Las opciones incluyen:
  • None - Indica que el cliente no debe ser autenticado.
  • Basic - Indica que se utilizará el esquema de Contraseña del Cliente. Las credenciales se proporcionarán mediante autenticación HTTP básica.
  • Parameter - Indica que se utilizará el esquema de Contraseña del Cliente. Las credenciales se proporcionarán como parámetros en el cuerpo de la solicitud.
La autenticación del cliente OAuth se describe en RFC 6749 Sección 2.3.
ID de cliente El identificador del cliente OAuth definido por el sistema de externo.
Secreto del cliente El secreto del cliente OAuth según lo definido por el sistema de externo.
Punto final del token El extremo del token de OAuth (por ejemplo, http://example.com/oauth/token )
Parámetros de punto final de token Parámetros pasados al extremo del token de OAuth. De forma predeterminada, Vinyl generará los parámetros apropiados según el flujo de OAuth. Utilice esta configuración únicamente para APIs de OAuth no conformes o no compatibles. Los parámetros deben especificarse en formato codificado de URL (application/x-www-form-urlencoded).
Si la lista de parámetros comienza con un signo comercial (&), los parámetros se fusionarán con los parámetros generados. Si un parámetro tiene el mismo nombre que un parámetro generado, el parámetro generado se sobrescribirá. Si un parámetro proporcionado no tiene un valor, por ejemplo, &grant_type&username=user&password=contraseña, el parámetro generado se eliminará. De lo contrario, el parámetro proporcionado se agrega a los parámetros generados.
La lista de parámetros admite la interpolación de cadenas. Las expresiones pueden hacer referencia a parámetros dinámicos, por ejemplo, nombre de usuario ={{ client_id }}&contraseña={{ client_secret }}. Esto resulta útil cuando se integra con APIs de externo que no utilizan nombres de parámetros estándar.
Alcances Lista de alcances de OAuth delimitados por espacios o saltos de línea. Opcional.
Ignorar TlsErrors Indica que Vinyl debe ignorar los errores de validación de certificados HTTPS. Esta opción solo debe habilitarse durante el desarrollo.

Cuando se utiliza el flujo de aserción de portador de SAML 2.0, las aserciones de SAML se pueden obtener de dos maneras:

  1. Un proveedor de identidad (IdP) externo emitirá una afirmación SAML durante el proceso de inicio de sesión único (SSO) de SAML. Consulte el tipo de proveedor SAML para más información.
  2. Vinyl puede generar y firmar las afirmaciones SAML a pedido. En cuyo caso, Vinyl actúa como IdP.

Cada fuente requiere configuración adicional.

Obtener Afirmaciones de SAML a Través de un IdP de Externo
Parámetro Valor Descripción
SamlSingleSignOnProvider Nombre de un proveedor de seguridad de Vinyl SAML.
Generación de Aserciones SAML Bajo Demanda
Parámetro Valor Descripción
Emisor El emisor de la afirmación SAML.
Audiencia La restricción de audiencia de la afirmación SAML. Aunque la especificación SAML indica que la audiencia es un URI, muchas implementaciones no lo respetan. En consecuencia, Vinyl no requiere que la audiencia sea un URI.
Destinatario El URI del destinatario de la aserción SAML (por ejemplo, http://example.com/service).
Certificado de firma Certificado utilizado para firmar la aserción SAML. El valor debe ser un archivo PKCS#12 codificado en base64 (.pfx). El certificado debe contener la clave privada.
FirmaCertificadoContraseña Contraseña del certificado de firma.

Configuración

El proveedor de seguridad OAuth expone un único extremo, escuchando respuestas de autorización en la dirección:

  • https://example.com/Vinyl/signin-{Provider}

Dónde https://example.com/Vinyl es la URL absoluta del directorio raíz de la aplicación Vinyl y "{Provider}" es el nombre codificado en URL y que distingue entre mayúsculas y minúsculas del proveedor de seguridad.

El estándar OAuth define este URI como el " Extremo de redirección": https://tools.ietf.org/html/rfc6749#section-3.1.2

La mayoría de las aplicaciones de terceros deberán configurarse con el extremo de redirección antes de autorizar cualquier solicitud.

Parámetros

El proveedor de seguridad OAuth define los siguientes parámetros:

Parámetro Predeterminado Ejemplo
Punto final de autorización https://example.com/oauth2/authorize URL del extremo de autorización de OAuth 2.0.
https://tools.ietf.org/html/rfc6749#section-3.1
Punto final del token https://example.com/oauth2/token URL del extremo del token OAuth 2.0
https://tools.ietf.org/html/rfc6749#section-3.2
Punto final de información de usuario https://examle.com/api/user/profile URL del Extremo que proporciona la identidad del usuario. Requerido cuando se utiliza OAuth como proveedor de autenticación externo. No forma parte del estándar OAuth. El extremo debe devolver una respuesta JSON que incluya la identidad del usuario.
Tipo de autenticación de cliente Parámetro Determina el esquema de autenticación del cliente OAuth 2.0. Las opciones incluyen:
  • None - Indica que el cliente no debe ser autenticado.
  • Basic - Indica que se utilizará el esquema de Contraseña del Cliente. Las credenciales se proporcionarán mediante autenticación HTTP básica.
  • Parameter - Indica que se utilizará el esquema de Contraseña del Cliente. Las credenciales se proporcionarán como parámetros en el cuerpo de la solicitud.
La autenticación del cliente OAuth se describe en RFC 6749 Sección 2.3.
ID de cliente Identificador de cliente OAuth 2.0.
https://tools.ietf.org/html/rfc6749#section-2.2
Secreto del cliente Secreto del cliente OAuth 2.0.
Alcances Lista delimitada por espacios en blanco de alcances de tokens de acceso de OAuth 2.0.
https://tools.ietf.org/html/rfc6749#section-3.3
Tipo de concesión autorización_código Tipo de concesión de OAuth 2.0.
https://tools.ietf.org/html/rfc6749#section-4.1.3
Ignorar TlsErrors Falso Indica si Vinyl debe ignorar los errores de TLS al realizar solicitudes de canal secundario al extremo del token de acceso. Esto sólo debe usarse para desarrollo y pruebas.

Soporte de Protocolo

Al crear una solicitud de autorización, Vinyl incluirá el ID del cliente (client_id), el secreto del cliente (client_secret) y los alcances (scope). Además, Vinyl agregará automáticamente los siguientes parámetros estándar:

  • redirect_uri - Vinyl construye el parámetro redirigir_uri a partir de la URL actual. Toma el formato https:example.com/Vinyl/signin-OAuth, donde OAuth es el nombre del proveedor de seguridad de OAuth.
  • estado - el parámetro de estado es una colección cifrada de pares de nombre/valor. Incluye un token de falsificación de solicitud entre sitios (CSRF) según https://tools.ietf.org/html/rfc6749#section-10.12

Usar OAuth para Autenticación Externa

Como se señaló anteriormente, OAuth es un protocolo de autorización, no un protocolo de autenticación. Sin embargo, algunas implementaciones de proveedores amplían el protocolo OAuth para incluir la autenticación. Normalmente, esto se hace publicando un extremo que identifica al usuario. Vinyl se refiere a dicho extremo como UserInfoEndpoint.

Vinyl se puede configurar para consultar UserInfoEndpoint para recuperar la identidad del usuario. Esto permite utilizar un proveedor de seguridad OAuth para la autenticación externa. Sin embargo, tenga en cuenta que el extremo debe cumplir los siguientes requisitos:

  • Vinyl debe poder llegar al extremo.
  • El extremo debe responder a una solicitud HTTP GET que no incluya un cuerpo de solicitud.
  • El extremo debe respetar la autenticación del cliente OAuth Basic (como se describe anteriormente).
  • La respuesta HTTP debe tener un código de estado 200.
  • La respuesta HTTP debe incluir un cuerpo con un tipo de contenido de aplicación/json.
  • El documento JSON debe incluir una propiedad de nivel superior que identifique al usuario.

Después de adquirir el token de acceso, Vinyl realizará una solicitud autenticada del cliente al UserInfoEndpoint. Vinyl analizará el cuerpo de la respuesta como JSON y tratará las propiedades de nivel superior como reclamaciones.

Por ejemplo, dada la siguiente respuesta de ejemplo:

HTTP/1.1 200 OK
Content-Type: application/json
{
    "user_name": "arthur.dent",
    "name": "Arthur Dent",
    "email": "arthurdent@example.com"
}

Los siguientes tipos de reclamo estarán disponibles:

  • nombre de usuario
  • nombre
  • correo

Además de especificar UserInfoEndpoint, el desarrollador debe asignar la notificación que identifica al usuario (en este caso, la notificación nombre_usuario) al tipo de uso de notificación Nombre.