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.
- Determine el URI de redireccionamiento.
- Registre Vinyl como aplicación cliente con el proveedor de OAuth.
- Cree el proveedor de OAuth dentro de Vinyl.
- Cree un proveedor de autenticación de fuente de datos (HTTP u OData) dentro de Vinyl.
- 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.
- Navegue hasta el Centro de control
- Haga clic en el botón Proveedores de seguridad
- En el panel Autenticación de origen de datos, haga clic en el botón Crear.
-
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
-
-
Haga clic en el botón Guardar
-
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.
- Navegue hasta el Centro de control
- Haga clic en el botón Proveedores de seguridad
- En el panel Autenticación de origen de datos, haga clic en el botón Crear.
-
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
-
-
Haga clic en el botón Guardar
-
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.
-
Tipo de autenticación: Código de autorización
-
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:
| |
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:
| |
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:
| |
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:
| |
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:
| |
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:
- 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.
- 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:
| |
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.