Este tutorial muestra cómo añadir la capacidad OIDC ( OpenID Connect) a un proveedor OAuth nativo existente utilizando API Manager.
Acerca de esta guía de aprendizaje
OpenID Connect es un protocolo de autenticación que funciona con OAuth para controlar el acceso de los usuarios a los recursos. Cuando utilizas OAuth para determinar las autorizaciones de un usuario, puedes utilizar adicionalmente OIDC para autenticar al usuario mediante el uso de JSON Web Tokens (JWT).
Antes de empezar
Este tutorial utiliza la API predefinida FindBranch y un proveedor OAuth nativo existente configurado con el tipo de concesión "Código de acceso". Para preparar su entorno para este tutorial, realice las siguientes tareas:
- Añada el servicio de pasarela DataPower® API Gateway al catálogo Sandbox, tal y como se explica en Creación y configuración de catálogos.
El catálogo Sandbox debe estar configurado para utilizar al menos una pasarela. Para este tutorial, debe utilizar la misma pasarela que utiliza la API FindBranch.
- Importe la API FindBranch y actívela como se explica en Tutorial: Importar una API.
- Cree el proveedor OAuth nativo de MyNativeOAuthProvider como se explica en Tutorial: Implementación de la seguridad OAuth.
Añadir capacidad OIDC a un proveedor nativo OAuth
Para añadir seguridad OIDC a un proveedor OAuth nativo, complete los siguientes pasos:
- Abra el proveedor OAuth para editarlo:
- Inicie sesión en API Manager.
- En la página de inicio, haga clic en el mosaico Gestionar recursos.
- En la lista de navegación Recursos, haga clic en Proveedores OAuth.
- En la lista de proveedores OAuth, haga clic en MyNativeOAuthProvider para abrirlo.
- En la lista de navegación Editar proveedor nativo de OAuth, haga clic en OpenID Connect.

- En la página OpenID Connect, seleccione Activar OIDC.

- Si hay alguna opción seleccionada en la lista Tipos de respuesta híbrida compatibles de la página, borre las selecciones.
- Seleccione Generar automáticamente el ensamblaje API OIDC.
Esta opción actualiza su API con el flujo para OIDC.

Aparece un mensaje para advertirle de que debe proporcionar un objeto criptográfico de firma de token de ID o una clave de firma de token de ID. En este tutorial, usted proporciona una clave JWK (en el siguiente paso).
- Haga clic en
para copiar la siguiente clave y, a continuación, péguela en el campo ID token signing key :{ "alg": "HS256", "kty": "oct", "use": "sig", "k": "o5yErLaE-dbgVpSw65Rq57OA9dHyaF66Q_Et5azPa-XUjbyP0w9iRWhR4kru09aFfQLXeIODIN4uhjElYKXt8n76jt0Pjkd2pqk4t9abRF6tnL19GV4pflfL6uvVKkP4weOh39tqHt4TmkBgF2P-gFhgssZpjwq6l82fz3dUhQ2nkzoLA_CnyDGLZLd7SZ1yv73uzfE2Ot813zmig8KTMEMWVcWSDvy61F06vs_6LURcq_IEEevUiubBxG5S2akNnWigfpbhWYjMI5M22FOCpdcDBt4L7K1-yHt95Siz0QUb0MNlT_X8F76wH7_A37GpKKJGqeaiNWmHkgWdE8QWDQ", "kid": "hs256-key" }
Esta clave no es segura y sólo está pensada para su uso en este tutorial.
- En el campo Algoritmo de firma del token de identificación, seleccione HS256 como algoritmo de firma para esta clave.

- Pulse Guardar.
Probar la seguridad de OIDC
Nota: Debido a las restricciones de uso compartido de recursos entre orígenes (CORS), la herramienta de prueba de ensamblaje no puede utilizarse con los navegadores Chrome o Safari en la plataforma macOS Catalina.
Cuando pruebe la nueva seguridad OIDC en el panel de pruebas del Gestor de API, complete los mismos pasos que utilizó para probar el proveedor OAuth nativo. El panel de prueba no muestra el token JWT que se recibe con el token de acceso, por lo que en este tutorial obtendrá el token JWT utilizando los comandos cURL para que pueda verificar que se devuelve el token.
- Configure el panel de pruebas para invocar su API:
- En la página Develop / findbranch, haga clic en la pestaña Test de la cabecera de la página.
La API importada FindBranch ya tiene una definición, que utiliza una única política llamada Invoke para ejecutar la API. Esta API está lista para ser probada.
- Para activar la API, haga clic en Configuración de destino.

- En la ventana Preferencias, active la opción Publicación automática para establecer el estado de la API en línea.

- Pulse Enviar.

- Si aparece el mensaje No se ha recibido respuesta, haga clic en Abrir el servidor.

Se abre una nueva pestaña del navegador. Si aparece un mensaje de error, ignórelo.
- Cambie a una ventana de comandos y utilice los comandos cURL para obtener el token de acceso y el token JWT que le permiten utilizar la API:
Nota: El código de autorización que recibes del proveedor de OAuth caduca al cabo de unos minutos. Para evitar tener que repetir la solicitud, prepare al máximo los dos comandos de este paso antes de ejecutar el primero.
- Ejecute el siguiente comando cURL para solicitar un código de autorización para la API:
curl -k -i --header "Authorization: Basic dXNlcjpwYXNz"\
--request GET "Authorization_URL\
?redirect_uri=https://example.com/redirect\
&scope=openid+details\
&response_type=code\
&client_id=Client_ID"
Donde:
- El parámetro cURL
-k permite a cURL ejecutar su operación incluso para conexiones de servidor inseguras.
- El parámetro cURL
-i incluye cabeceras de respuesta de protocolo en la salida para que pueda ver la respuesta en la ventana de comandos.
- La cabecera de autorización especifica que se autenticará con el registro de usuarios (el registro de usuarios de AuthURL que ha creado) utilizando la autenticación Básica, y proporciona la contraseña ("pass") codificada en base64.
- La dirección
Authorization_URL se copia desde el panel de pruebas.
redirect_uri es la redirección OAuth URL que configuró en la Sandbox Test App.
- En
scope se especifican dos ámbitos, concatenados con +
: el ámbito details de la API al que accederá, y el ámbito OIDC que le autoriza.
- La dirección
response_type es code porque desea recibir un código de autorización.
- La dirección
Client_ID se copia de la sección de identificación
del panel de pruebas y garantiza que pueda acceder a su Sandbox Test App.
Ejemplo:
curl -k -i --header "Authorization: Basic dXNlcjpwYXNz"\
--request GET "https://example.com/eb-org/sandbox/mynativeoauthprovider/oauth2/authorize\
?redirect_uri=https://example.com/redirect\
&scope=openid+details\
&response_type=code\
&client_id=01c43d1620e0c4e6ded0dec20b5655d9"
La respuesta tiene el aspecto siguiente:
HTTP/1.1 302 Found
Connection: Keep-Alive
Transfer-Encoding: chunked
X-RateLimit-Limit: name=default,100;
X-RateLimit-Remaining: name=default,93;
User-Agent: curl/7.55.1
Accept: */*
X-Client-IP: IP_address
X-Global-Transaction-ID: 12df8d855e7e18ee00000681
Location: https://example.com/redirect? code=AALxLnKixp9VIy3PvVKBwfbuTgNbwnZtHB6iS9b_BUw39UZZjUi2CeFdPYJZW0mgqNMtzFUhrsfu3FFiC9aGfHnJ3CqdIANqlo-v-DkQv7ELWw
Content-Type: text/xml
Date: Fri, 27 Mar 2020 15:17:02 GMT
- Copie el código de autorización (devuelto en el parámetro
code ) para poder utilizarlo en el siguiente paso.
- Ejecute el siguiente comando cURL para intercambiar el código de autorización por un token de acceso y un token JWT:
curl -k -i --header "Content-Type: application/x-www-form-urlencoded"\
--request POST "Token_URL"\
--data-urlencode "code=Authorization_code"\
--data-urlencode "client_secret=Client_Secret"\
--data-urlencode "grant_type=authorization_code"\
--data-urlencode "scope=openid details"\
--data-urlencode "client_id=Client_ID"
Donde:
- La dirección
Token_URL se copia desde el panel de pruebas.
- La dirección
Authorization_code se copia de la respuesta al comando anterior.
- La dirección
Client_Secret se copia de la sección "Identificación" del panel de pruebas.
- La dirección
grant_type es "authorization_code".
- En
scope se vuelven a especificar dos ámbitos (separados por un espacio en este comando porque los valores van entre comillas).
- La dirección
Client_ID se copia de la sección "Identificación" del panel de pruebas.
Ejemplo:
curl -k -i --header "Content-Type: application/x-www-form-urlencoded"\
--request POST "https://example.com/eb-org/sandbox/mynativeoauthprovider/oauth2/token"\
--data-urlencode "code=AAJ8zz5SvYgxFw0zY0fOxAOiDeaw_PLR6dAFh-ojXVjv-80TB25VGfj28J4Jf7jzgaWVVfLQuVTRSfUbp2hDjYsX9QmZHJOg5p_bfHFWBlQlLg"\
--data-urlencode "client_secret=d6634763de6c612ae69636d0fc948650"\
--data-urlencode "grant_type=authorization_code"\
--data-urlencode "scope=openid details"\
--data-urlencode "client_id=01c43d1620e0c4e6ded0dec20b5655d9"
La respuesta tiene el aspecto siguiente:
{"token_type":"Bearer", "access_token":"AAIgMDFjNDNkMTYyMGUwYzRlNmRlZDBkZWMyMGI1NjU1ZDkm4gPMmFjgv2XXhI7t6LZ8BcIRaO_LvWirsNDlirJWi_7qqKGp_fr5py7yE_fHoD17ajAUJPPuUjsV5xj7go25JQjk_smS-AYvmPXRi99IxQ" ,"scope":"openid details","expires_in":3600,"consented_on":1585322249, "id_token":"eyJraWQiOiJoczI1Ni1rZXkiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI3NjE2OTRiYS1iYjYzLTRlNWQtOTc1ZS04NThkZGYxMmI2ZTkiLCJpc3MiOiJJQk0gQVBJQ29ubmVjdCIsInN1YiI6InVzZXIiLCJhdWQiOiIwMWM0M2QxNjIwZTBjNGU2ZGVkMGRlYzIwYjU2NTVkOSIsImV4cCI6MTU4NTMyNTg1MiwiaWF0IjoxNTg1MzIyMjUyLCJhdF9oYXNoIjoibDZYRDV5SjVuMTU1MkZSV19pR2k2USJ9.IO1RVPWV5zOhYGmCXUvG0_-9OO0guURPwaEbGOqCpCg" }
La respuesta incluye dos tokens: el token de acceso y el JWT (etiquetado id_token
). Recibir estos tokens verifica que estás autenticado usando OIDC y tu proveedor nativo de OAuth.
Nota: Si recibe unInvalid requestcon un error sobre un código caducado, significa que el código de autorización ha caducado. Vuelva al subpaso a y repita el proceso para obtener un nuevo código de autorización y, a continuación, cámbielo rápidamente por el token de acceso y el token JWT.
- Vuelva al panel de pruebas y haga clic en Enviar para ejecutar la API.
No necesitas pegar ningún código en el panel de pruebas porque has utilizado cURL para intercambiar tokens con API Connect.
La respuesta de la API FindBranch muestra el código de estado200
OKy la información de la cabecera de respuesta, y el cuerpo contiene los datos de cada sucursal bancaria.

Qué ha hecho en esta guía de aprendizaje
En esta guía de aprendizaje, ha completado las actividades siguientes:
- Se ha añadido seguridad OIDC a una API existente.
- Probada la seguridad solicitando manualmente un código de autorización e intercambiándolo por un token de acceso más un token JWT antes de invocar la API.