Proveedor de seguridad OAuth en Jitterbit App Builder
Introducción
El proveedor de seguridad OAuth habilita la compatibilidad con OAuth 2.0. El proveedor de seguridad es responsable de autorizar solicitudes de servicios web. Los siguientes tipos de fuentes de datos admiten OAuth:
-
REST
-
OData
-
RDBMS (limitado a proveedores CData compatibles)
Además, es posible configurar un proveedor de seguridad OAuth como proveedor de autenticación externo. Consulta a continuación para obtener información adicional.
Concesiones de OAuth 2.0
El proveedor de seguridad OAuth admite las siguientes concesiones de OAuth 2.0:
-
Código de autorización RFC 6749.
-
Credenciales del cliente RFC 6749.
-
Credenciales de contraseña del propietario del recurso RFC 6749.
-
Aserción de portador SAML 2.0 RFC 7522.
-
Token de portador JWT RFC 7523.
Código de autorización
La concesión de código de autorización de OAuth 2.0 proporciona autorización delegada a nivel de usuario. Esta concesión se define en RFC 6749.
En el flujo de código de autorización, App Builder redirige el agente de usuario (navegador) al servidor de autorización. Una vez que el usuario ha iniciado sesión correctamente y aprobado la solicitud de autorización, el servidor de autorización redirige el agente de usuario de vuelta a App Builder. La redirección incluye un código de autorización. App Builder realiza una solicitud por canal trasero 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.
Por sí solo, OAuth proporciona autorización, no autenticación. Por lo tanto, los proveedores de seguridad OAuth no se utilizan típicamente 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 OAuth publica un punto de conexión que proporciona la identidad del usuario, el proveedor de seguridad OAuth se puede utilizar como proveedor de autenticación externo. Consulta el Punto de conexión de información del usuario para obtener más detalles.
Credenciales del cliente
La concesión de credenciales del cliente de OAuth 2.0 proporciona autenticación a nivel de cliente, similar a una cuenta de servicio. En este flujo, se intercambian las credenciales del cliente OAuth por un token de acceso OAuth. La concesión de credenciales del cliente se define en RFC 6749.
Credenciales de contraseña del propietario del recurso
La concesión de credenciales de contraseña del propietario del recurso de OAuth 2.0 se define en RFC 6749. Sin embargo, la concesión ha sido deprecada.
Importante
NO se debe utilizar 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 del propietario del recurso 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.
App Builder proporciona compatibilidad parcial con la concesión de credenciales de contraseña del propietario del recurso de OAuth 2.0. App Builder no solicita al usuario sus credenciales. En su lugar, se utiliza una única credencial para autorizar a todos los usuarios. De esta manera, la concesión es funcionalmente equivalente a una cuenta de servicio.
Aserción de portador SAML 2.0
La concesión de aserción de portador SAML 2.0 de OAuth 2.0 proporciona autenticación de fuente de datos a nivel de usuario. En este flujo, se intercambian aserciones SAML por tokens de acceso OAuth. La concesión de aserción de portador SAML 2.0 de OAuth 2.0 se define en RFC 7522.
Token de portador JWT
La concesión de token de portador JWT de OAuth 2.0 proporciona autenticación de fuente de datos a nivel de usuario. En este flujo, se intercambian tokens web JSON (JWT) por tokens de acceso OAuth. La concesión de token de portador JWT de OAuth 2.0 se define en RFC 7523.
Configuración
La configuración varía según la concesión de OAuth. Como mínimo, OAuth requiere:
-
Identificador de cliente (
client_id) y secreto de cliente (client secret). -
Punto final de token.
Las concesiones de OAuth individuales requerirán configuración adicional según se indica a continuación.
Autenticación
Las propiedades de autenticación determinan la concesión de OAuth y los esquemas de autenticación.
-
Tipo de autenticación: OAuth
-
Concesión de OAuth: Selecciona una concesión de OAuth compatible.
-
Autenticación de cliente OAuth: Determina el esquema de autenticación de cliente OAuth 2.0 RFC 6749 Sección 2.3. Las opciones incluyen:
-
Básico: Indica que se utilizará el esquema de contraseña de cliente. Las credenciales se suministrarán mediante autenticación HTTP Basic. (
client_secret_basic.) -
JWT de secreto de cliente: El cliente se autentica mediante un token web JSON (JWT) firmado con el secreto de cliente (
client_secret_jwt). (Consulta Tipos de autenticación de cliente JWT.) -
Ninguno: Indica que el cliente no debe autenticarse. (
none.) -
Publicación: Indica que se utilizará el esquema de contraseña de cliente. Las credenciales se suministrarán como parámetros de formulario en el cuerpo de la solicitud. (
client_secret_post.) -
JWT de clave privada: El cliente se autentica mediante un token web JSON (JWT) firmado con una clave privada (
private_key_jwt). (Consulta Tipos de autenticación de cliente JWT.)
-
-
Autenticación de recursos de OAuth: Determina el esquema de autenticación de solicitud de recursos. Las opciones incluyen:
-
Portador: Esquema de autenticación de portador. Predeterminado.
-
Formulario: Añade el token de acceso al cuerpo codificado en URL de formulario.
-
Consulta: Añade el token de acceso a la cadena de consulta.
-
-
Propietario del token: Determina si los tokens se emiten a usuarios individuales o al sistema cliente. Las opciones incluyen:
-
Usuario: Los tokens se emiten a usuarios individuales.
-
Cliente: Los tokens se emiten al sistema cliente.
-
-
Eliminar token al cerrar sesión: Cuando está habilitado, App Builder elimina el token almacenado cuando el usuario cierra sesión. Predeterminado: Deshabilitado.
Tipos de autenticación de cliente JWT
Los tipos de autenticación de cliente JWT admiten las siguientes opciones de configuración:
-
Aserción:
-
Emisor: Sin valor predeterminado. A menudo utiliza un identificador de aplicación o el ID de cliente. Consulta la documentación del servidor de autorización.
-
Audiencia: Por defecto, el punto final del token (tal como se define en el panel Puntos finales) según el estándar.
-
Asunto: Por defecto, el ID de cliente (tal como se especifica en el panel Credenciales) según el estándar.
-
-
Credenciales:
-
Tipo:
ClientSe requiere ID de cliente. Secreto de cliente se ignora y puede omitirse.
-
-
Certificados:
-
Uso:
SigningUn certificado solo lo utiliza el tipo de autenticación de cliente JWT de clave privada. El JWT de secreto de cliente utiliza el secreto de cliente como clave.
-
-
Propiedades:
-
Parámetro:
JwtClaimSet -
Parámetro:
SigningAlgorithm
-
Token
Las siguientes concesiones generan tokens que se intercambian por tokens de acceso de OAuth:
-
Aserción de portador SAML 2.0.
-
Token de portador JWT.
Aserción de portador SAML 2.0
-
Emisor: El emisor de la aserción SAML.
-
Audiencia: La restricción de audiencia de la aserción SAML. Aunque la especificación SAML indica que la audiencia es un URI, muchas implementaciones no lo respetan. En consecuencia, App Builder no requiere que la audiencia sea un URI.
-
Destinatario: El URI del destinatario de la aserción SAML (por ejemplo,
http://example.com/service).
Token de portador JWT
-
Emisor: Reclamación de emisor JWT (https://tools.ietf.org/html/rfc7523#section-3). Por defecto, el identificador de cliente (
client_id). -
Asunto: Reclamación de asunto JWT (https://tools.ietf.org/html/rfc7523#section-3).
-
Si el Propietario del Token es Usuario, se establece de forma predeterminada la identidad del usuario actual.
-
Si el Propietario del Token es Cliente, se requiere el Asunto.
-
Audiencia: Reclamación de audiencia JWT (https://tools.ietf.org/html/rfc7523#section-3). Se establece de forma predeterminada en el Punto de Conexión de Token.
Puntos de Conexión
| Tipo | Permisos | Descripción |
|---|---|---|
| Punto de Conexión de Autorización | Código de Autorización | URL del punto de conexión de autorización OAuth 2.0. RFC 6749 |
| Punto de Conexión de Token | Todos | URL del punto de conexión de token OAuth 2.0. RFC 6749 |
| Punto de Conexión de Información del Usuario | Código de Autorización | Punto de conexión que proporciona la identidad del usuario. Se requiere cuando se trata OAuth como un proveedor de autenticación externo. No forma parte del estándar OAuth. El punto de conexión debe devolver una respuesta JSON que incluya la identidad del usuario. |
Credenciales
| Tipo | Permisos | Descripción |
|---|---|---|
| Cliente | Todos | Identificador de cliente OAuth 2.0 (client_id) y secreto (client_secret). RFC 6749 |
| Propietario del Recurso | Credenciales de Contraseña del Propietario del Recurso | Nombre de usuario (username) y contraseña (password) del propietario del recurso OAuth 2.0. RFC 6749 |
Certificados
| Tipo | Permisos | Descripción |
|---|---|---|
| Firma | Aserción de Portador SAML 2.0 | El permiso de Aserción de Portador SAML 2.0 requiere un certificado X.509 con clave privada en un contenedor PKCS#12 (.pfx) protegido por contraseña. |
| Token de Portador JWT | El permiso de Token de Portador JWT requiere una clave privada RSA PKCS#1 codificada en PEM (RSA PRIVATE KEY). |
Propiedades
El proveedor de seguridad OAuth admite los siguientes parámetros adicionales:
| Parámetro | Predeterminado | |
|---|---|---|
BearerSchemeIdentifier |
Bearer |
Esquema de Authorization cuando se utiliza la autenticación de recursos Bearer. |
ExpiresIn |
Vencimiento del token de acceso en segundos. Se puede utilizar si el punto de conexión de token no proporciona un vencimiento y el servidor de recursos no devuelve una respuesta 401 Unauthorized cuando el token de acceso ha vencido. |
|
IgnoreTlsErrors |
False |
Indica si App Builder debe ignorar errores TLS al realizar solicitudes de canal posterior al punto de conexión de token. Esto solo debe utilizarse para desarrollo y pruebas. |
Scopes |
Lista de alcances de token de acceso OAuth 2.0 delimitada por espacios en blanco. RFC 6749 | |
SingleUseAccessToken |
False |
Indica si el token de acceso solo se puede utilizar una vez. |
TokenEndpointParameters |
Parámetros pasados al punto de conexión de token OAuth. De forma predeterminada, App Builder generará los parámetros apropiados según el flujo OAuth. Solo utiliza esta configuración para API OAuth no conformes u otros no compatibles. Los parámetros deben especificarse en formato de URL codificada de formulario (application/x-www-form-urlencoded). Si la lista de parámetros comienza con un ampersand (&), los parámetros se fusionarán en 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=password, se eliminará el parámetro generado. De lo contrario, el parámetro proporcionado se añade a los parámetros generados. La lista de parámetros admite interpolación de cadenas. Las expresiones pueden hacer referencia a parámetros dinámicos, por ejemplo username={{ client_id }}&password={{ client_secret }}. Esto es útil al integrar con API de terceros que no utilizan nombres de parámetros estándar. |
|
RefreshRequiresScopes |
False |
Indica si los alcances (scope) deben incluirse en el cuerpo de la solicitud enviada al punto de conexión de token al actualizar el token de acceso. |
AuthorizationEndpointParameters |
(Desde App Builder 4.57.) Permite a los administradores inyectar parámetros de URL al redirigir al servidor de autorización (por ejemplo, &access_type=offline). Este parámetro sigue las mismas reglas que la propiedad TokenEndpointParameters. |
Código de autorización
Las siguientes propiedades adicionales se aplican a la concesión de Código de Autorización.
| Parámetro | Predeterminado | |
|---|---|---|
BackchannelAuthorization |
False |
Indica si se puede adquirir un código de autorización mediante una solicitud de backchannel (servidor a servidor). Esta es una extensión no estándar de la concesión de Código de Autorización. |
Aserción de portador SAML 2.0
Las siguientes propiedades adicionales se aplican a la concesión de Aserción de Portador SAML 2.0.
| Parámetro | |
|---|---|
SamlSingleSignOnProvider |
Nombre de un proveedor de seguridad SAML de App Builder. Este parámetro solo se aplica a la concesión de Aserción de Portador SAML 2.0. |
Token portador JWT
Las siguientes propiedades adicionales se aplican a la concesión de Token Portador JWT.
| Parámetro | Predeterminado | |
|---|---|---|
JwtClaimSet |
{ "scope": "{{ scope }}" } |
Los servidores de autorización pueden requerir reclamaciones personalizadas. Por ejemplo, Google requiere una reclamación scope que coincida con el parámetro OAuth scope. El parámetro JwtClaimSet permite a los administradores proporcionar reclamaciones adicionales. El valor toma la forma de una plantilla JSON. Los siguientes valores pueden sustituirse en la plantilla:
|
SigningAlgorithm |
RS256 |
Parámetro de algoritmo JWT según se define en RFC 7518. El único algoritmo compatible es RS256. |
Rest
Las siguientes propiedades adicionales se aplican cuando se utiliza el proveedor de seguridad OAuth para autenticar fuentes de datos REST. Se ignoran para puntos finales OAuth y otros tipos de fuentes de datos, incluidos OData y RDBMS.
Los encabezados de solicitud deben separarse por un retorno de carro (aparecer en su propia línea).
| Parámetro | Predeterminado | Ejemplo | |
|---|---|---|---|
RequestHeaders |
X-Custom-Header: Value X-Another-Header: Value |
Encabezados HTTP personalizados añadidos a las solicitudes del punto final REST. Los encabezados deben formatearse de acuerdo con RFC 7230. El plegado de líneas no es compatible. |
Compatibilidad de protocolos
Tokens de actualización
Si la solicitud de token de acceso incluye un token de actualización, App Builder intentará automáticamente utilizar el token de actualización para adquirir un nuevo token de acceso después de recibir una respuesta 401 Unauthorized.
Código de autorización
Solicitud de autorización
Al construir una solicitud de autorización, App Builder incluirá el identificador del cliente (client_id), el secreto del cliente (client_secret) y los alcances (scope). Además, App Builder añadirá automáticamente los siguientes parámetros estándar:
-
redirect_uri: App Builder construye el parámetroredirect_uria partir de la URL actual. Toma la formahttps://example.com/Vinyl/signin-OAuth, donde OAuth es el esquema del proveedor de seguridad OAuth. -
state: El parámetro state es una carga útil cifrada y opaca. Incluye un token de falsificación de solicitud entre sitios (CSRF) según RFC 6749.
Punto final de redirección
Según se define en RFC 6749, la concesión de código de autorización expone un punto final de redirección. Este punto final escucha las respuestas de autorización en la dirección:
https://example.com/Vinyl/signin-OAuth
Donde https://example.com/Vinyl es la URL absoluta al directorio raíz de la aplicación App Builder y OAuth es el esquema que distingue entre mayúsculas y minúsculas del proveedor de seguridad. Cualquier carácter especial debe estar codificado en URL.
La mayoría de las aplicaciones de terceros deberán configurarse con el punto final de redirección antes de autorizar cualquier solicitud.
Proxy inverso
Desde App Builder 4.59, el URI de redirección de OAuth omite el número de puerto cuando se utiliza el puerto predeterminado. Esto garantiza compatibilidad con proveedores OAuth cuando App Builder se aloja detrás de un proxy inverso.
Para solucionar este problema con App Builder 4.58 o anterior, configura un proveedor de seguridad URL Rewrite para eliminar el puerto explícito del URI de redirección:
- Navega a IDE > Security Providers.
- En el panel Configuration, expande el menú More y haz clic en Import Provider.
-
Pega la siguiente configuración, reemplazando
example.comcon el nombre de host de App Builder:{ "name": "URL Rewrite", "type": "rewrite_url", "settings": { "MatchUrl": "https://example.com:443", "RewriteUrl": "https://example.com" } } -
Haz clic en el botón Import, luego haz clic en Proceed para confirmar.
- Regresa a la página Security Providers. En el panel Configuration, expande el menú More y haz clic en Request Pipeline.
- Localiza el proveedor URL Rewrite importado. Establece su Priority (por ejemplo,
10) y marca la opción Enabled.
Para verificar la corrección, regresa a la página Security Providers, expande el menú More y haz clic en Inspect Request. El Port debe estar vacío y Default debe estar marcado.
Uso de OAuth para autenticación externa
Como se mencionó anteriormente, OAuth es un protocolo de autorización, no de autenticación. Sin embargo, algunas implementaciones de proveedores extienden el protocolo OAuth para incluir autenticación. Típicamente, esto se hace publicando un endpoint que identifica al usuario. App Builder se refiere a tal endpoint como el Endpoint de Información del Usuario.
App Builder puede configurarse para consultar el Endpoint de Información del Usuario y recuperar la identidad del usuario. Esto permite usar un proveedor de seguridad OAuth para autenticación externa. Sin embargo, ten en cuenta que el endpoint debe cumplir con los siguientes requisitos:
-
El endpoint debe ser accesible por App Builder.
-
El endpoint debe responder a una solicitud HTTP
GETque no incluya un cuerpo de solicitud. -
El endpoint debe respetar la autenticación de cliente OAuth Basic (como se describe arriba).
-
La respuesta HTTP debe tener un código de estado
200. -
La respuesta HTTP debe incluir un cuerpo con un
Content-Typedeapplication/json. -
El documento JSON debe incluir una propiedad de nivel superior que identifique al usuario.
Después de adquirir el token de acceso, App Builder realizará una solicitud autenticada de cliente al Endpoint de Información del Usuario. App Builder analizará el cuerpo de la respuesta como JSON, tratando 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 reclamación estarán disponibles:
-
user_name -
name -
email
Además de especificar el Endpoint de Información del Usuario, el desarrollador debe asignar la reclamación que identifica al usuario (en este caso, la reclamación user_name) al tipo de uso de reclamación Nombre.
Aserción portadora SAML 2.0
Al usar el flujo de Aserción Portadora SAML 2.0, las aserciones SAML pueden obtenerse de una de dos formas:
-
App Builder genera y firma las aserciones SAML bajo demanda. En este caso, App Builder actúa como el IdP.
-
(Obsoleto) un proveedor de identidad (IdP) de terceros emite una aserción SAML durante el proceso de inicio de sesión único (SSO) SAML. consulta el tipo de proveedor SAML para obtener más información.
Cada origen requiere configuración adicional.
Generar aserciones SAML bajo demanda
Para generar una aserción SAML bajo demanda, configura las propiedades de Token como se describe arriba. Además, la concesión de Aserción Portadora SAML 2.0 requiere un certificado de Firma con una clave privada.
Obtener aserciones SAML de un IdP
Para obtener aserciones SAML de un IdP de terceros, establece el parámetro SamlSingleSignOnProvider.
Limitaciones
- Los tipos de autenticación de cliente JWT no pueden usarse con la concesión JWT Bearer Token. Ambos usan un JWT, pero cada token tiene requisitos diferentes. El proveedor de seguridad OAuth admite configurar solo un único token JWT.