OAuth Introspección para proveedores externos de servicios de « OAuth »

OAuth La validación de tokens se puede delegar al proveedor externo de Open Authorization ( OAuth )/Open ID Connect (OIDC) mediante el método « URL » de Introspection. Los clientes pueden utilizar un proveedor externo de autenticación de identidades ( OAuth ) u OIDC para obtener un token protegido por API Connect. IBM® API Connect puede utilizar esta función junto con el proveedor mencionado para proteger el acceso a la API.

Puede utilizar API Connect para proteger una API que esté protegida mediante el uso del token de acceso de terceros OAuth, de conformidad con la especificación de introspección definida en el RFC 7662. Además de la especificación, se proporciona la cabecera x-Introspect- para pasar otro contenido al tercero según sea necesario.

La información de autenticación se puede llevar en la solicitud configurando una cabecera de solicitud de autenticación básica.

El siguiente diagrama de secuencia muestra el flujo global de solicitud y respuesta. El propósito de este diagrama es solamente proporcionar una visualización general de la naturaleza del flujo; para los detalles precisos, consulte la información explicativa después del diagrama.


Diagrama de flujo de OAuth e Introspect URL

El servidor de autenticación Introspect URL está configurado en la configuración del proveedor externo OAuth. Consulte «Configuración de un proveedor de servicios de « OAuth » de terceros ».

Cuando una API está protegida por un proveedor de autenticación de terceros ( OAuth ), API Connect extrae el token de portador y envía una solicitud POST a HTTP al punto final especificado en el campo « URL » de Introspect.

La solicitud GET está protegida por API Connect con esta característica.

Puede utilizar un prefijo de cabecera para pasar información al proveedor de terceros. El prefijo de cabecera puede incluir una expresión regular y especifica el patrón de nombre de las cabeceras que se van a utilizar para enviar información adicional, como por ejemplo x-introspect-*.
     GET /petstore/pet/123 HTTP/1.1
     Host: apiconnect.com
     x-Introspect-type: dog
     x-Introspect-name: simon
     x-custom-apic: petstore123
     Authorization: Bearer tGzv3JOkF0XG5Qx2TlKWIA
     x-IBM-Client-Id: xxx-xxx

No obstante, si desea utilizar un prefijo de encabezado diferente, especifique el valor deseado en el campo «Patrón de encabezado personalizado» de la configuración del proveedor externo de OAuth. Para obtener más información sobre la configuración de un proveedor externo de OAuth, consulte «Configuración de un proveedor externo de OAuth ». La característica Patrón de cabecera personalizado sólo está disponible con DataPower® API Gateway, si utiliza DataPower Gateway (v5 compatible) , el prefijo de cabecera debe ser x-Introspect-.

API Connect envía esta solicitud POST al punto final de introspección especificado en x-tokenIntrospect, tal y como se muestra en el ejemplo de código:
     POST /oauth/introspectURL HTTP/1.1
     Host: apiconnect.ibm.com
     Content-Type: application/x-www-form-urlencoded
     x-Introspect-type: dog
     x-Introspect-name: simon
     x-custom-apic: petstore123
     token_type_hint=access_token&token=tGzv3JOkF0XG5Qx2TlKWIA

El proveedor externo de OIDC OAuth responde conHTTP 200indicando que la solicitud ha sido satisfactoria y que la carga útil contiene la información de señal. API Connect respeta la reclamación activa tal como se define en la especificación RFC.

Si el valor de la reclamación activa estrue, la señal se trata como válida.
   HTTP/1.1 200 OK
    Content-Type: application/json;charset=UTF-8
    Cache-Control: no-store
    Pragma: no-cache

    { “active”:true,
       “token_type”:“bearer”,
       “client_id”:“xxx-xxx”,
       “username”:“John Smith”,
       ...
    }
Si el valor de la reclamación activa esfalse, la señal se trata como no válida.
     HTTP/1.1 200 OK
     Content-Type: application/json;charset=UTF-8
     Cache-Control: no-store
     Pragma: no-cache

     {
       "active":false
     }

Un código de respuesta distinto de HTTP 200 indica que no se ha podido procesar la solicitud.

Cuando el token de OAuth es válido y está activo, las variables de contexto se rellenan con la información de la respuesta JSON de introspect. Para obtener más información, consulte Variables de contexto deAPI Connect.

Al ponerse en contacto con el punto final de introspección, API Connect utiliza client_id/appId y client_secret/appSecret para construir la cabecera de autorización básica HTTP.

Por defecto, si x-introspect-basic-authorization-header existe en la solicitud, el valor se utiliza para la cabecera de autenticación HTTP Basic cuando se contacta con el endpoint de introspección. API Connect verifica que el valor de la cabecera de autenticación HTTP Basic esté codificado en Base64 antes de enviarlo, y lo codifica si es necesario como se muestra en el siguiente ejemplo. Si la cabecera ya está codificada, se envía sin modificación.
GET /petstore/pet/123 HTTP/1.1
Host: apiconnect.com
x-introspect-basic-authorization-header: user:password
API Connect emite lo siguiente:
POST .. 
Authorization: Basic M3JkLXBhcnR5LWNsaWVudF9pZDozcmQtcGFydHlfY2xpZW50X3NlY3JldA==token_type_hint=access_token&token= ..
Si utiliza el DataPower API Gateway, puede especificar su propio valor para el encabezado de autenticación básica « HTTP » introduciendo el valor requerido en el campo «Nombre del encabezado de autenticación básica» de la configuración del proveedor externo de OAuth. Las reglas siguientes determinan qué datos de autenticación se pasan al punto final de introspección:
  • Si hay una cabecera de autenticación básica en la solicitud, se utilizan las credenciales especificadas. El valor debe ser una serie con el formato user:password, o el equivalente codificado en Base64 ; API Connect Base64 codificará el valor si es necesario antes de enviar la solicitud al punto final de introspección.
  • Si la solicitud no incluye un encabezado de autenticación básica, pero se han especificado valores en los campos «Nombre de usuario de autenticación básica» y «Contraseña de autenticación básica» de la configuración del proveedor externo OAuth, se utilizarán dichos valores.
  • Si la solicitud no incluye un encabezado de autenticación básica y no se han proporcionado el nombre de usuario ni la contraseña en la configuración del proveedor externo OAuth, pero se han client_id proporcionado los client_secret valores y en el cuerpo de la solicitud, se utilizarán estos.
  • De lo contrario, se devuelve un error.
Para obtener más información sobre la configuración de un proveedor externo de OAuth, consulte «Configuración de un proveedor externo de OAuth ».
Si se scope validate url configuran el ámbito y/o ambos, y si la respuesta es un token activo con una reclamación de ámbito procedente del punto final de introspección del proveedor de OAuth de terceros, se aplica API Connect además la validación del ámbito en el siguiente orden:
  1. Si scope está configurado para la protección de la API de OAuth, comprueba el ámbito de terceros y compáralo con el ámbito configurado.
  2. Si scope validation url está configurado, verifique el ámbito de terceros con la validación del ámbito URL.
  3. Si el punto final de introspección del proveedor externo OAuth no devuelve un ámbito, la pasarela no comprobará el ámbito definido en la definición de seguridad de la API en la que se utiliza el recurso del proveedor externo OAuth. Para obtener más información sobre cómo configurar una definición de seguridad de « OAuth » en una API, consulte Creación de una definición de seguridad de « OAuth ».
Para obtener más información, consulte «Ámbito de aplicación ».
Solo DataPower Gateway (Classic)De forma predeterminada, el ID API Connect de cliente y el ámbito se envían al proveedor externo de servicios de OAuth. Puede suprimir este comportamiento de una de las formas siguientes:
  • Proporcione una cabecera suppress-parameters como se indica a continuación:
    suppress-parameters: client_id
    suppress-parameters: scope
    o
    suppress-parameters: client_id scope
    en función de los parámetros que desee suprimir.
  • Defina una propiedad de API denominada suppress-parameters en la propia definición de API, con uno de los siguientes valores de serie:
    client_id
    scope
    o
    client_id scope
    en función de los parámetros que desee suprimir. Para obtener información sobre cómo definir propiedades de API, consulte Establecimiento de propiedades de API.