Salesforce como IdP usando OpenId Connect - Prueba de concepto

Toca un caso práctico: Quiero usar Salesforce como Identity Provider para una app, pero usando OpenId Connect en lugar de SAML.

Para hacer una prueba de concepto, voy a seguir este manual para hacerlo con Okta (https://onkarbhat.medium.com/testing-an-oidc-provider-using-the-openid-connect-playground-d8253451e46d), junto con el manual de Salesforce de OpenId Connect (https://help.salesforce.com/s/articleView?id=sf.service_provider_define_oid.htm&language=en_US&type=5)

Como aún no tengo app, voy a hacer la prueba de concepto con el playground de openidconnect.net

Crear app conectada

El primer paso es configurar una app conectada (que corresponde al Service Provider).

Desde App Manager (o Gestor de Aplicación), creamos una nueva aplicación conectada. Configuro los datos principales, y marco "Activar configuración de OAuth".

En la URL de devolución de llamada, indico https://openidconnect.net/callback, que es la URL de callback del playground.

Dentro de los ámbitos de oauth, añado openid (de momento es lo básico). Aunque puede que a futuro necesite otros, como api o refresh token, de momento es lo mínimo para esta POC.

Dentro de la configuración, marco Configure ID token. (Configurar token de Id.)

Marco también Include standard claims ("reclamaciones estándar") e Include Custom Attributes (atributos personalizados)

Activo también el single logout (que en español se traduce en un nada intuitivo "Activar inicio de sesión único"), e indico https://openidconnect.net/logout como url de logout.

Añado también una URL de inicio de la app, a https://openidconnect.net/. A futuro me servirá para abrir la app desde mi SF.

Una vez guardada la app conectada, puedo acceder a los detalles de consumidor. Copio el consumer key y consumer secret, ya que los tengo que utilizar en el playground.

De momento no configuro las politicas: todos los usuarios pueden autorizarse, aunque a futuro querré definir qué perfiles de usuario puedan acceder mediante esta app.

Configurar app (playground)

Una vez dada de alta la app conectada, vamos al playground. Para ver las cosas bien, lo abro en una sesión de navegador diferente.

En la sección debugger, hacemos click en "Configuration", y elegimos "Server Template" como Custom

En mi caso, como es una sandbox, pruebo con https://MyDomainName--sanboxname.sandbox.my.salesforce.com/.well-known/openid-configuration . Pruebo accediendo con el navegador y recobo respuestas, así que ok. Pongo la dirección y hago click en "Use Discovery Document".

  • En ese momento, se rellenan los datos de Token Endpoint y Token Keys Endpoint.

  • Por último, copio el consumer key de mi app conectada en el campo OIDC Client Id y el consumer secret en el campo OIDC Client Secret.

  • Dejo scope=openid y audiencia en blanco.

Hago click en Save, y en el request ya me aparece una request hacia mi sandbox. Hago click en Start.

Y voilá! Me aparece la pantalla de login de Salesforce; una vez logado, me pide permiso para acceder

Una vez doy OK, vuelvo al playground, con un exchange code. Hago click en el siguiente paso, y veo que Openidconnect recibe un token. Este es el JWT que recibirá mi app una vez que llame al servicio de oauth/token de salesforce.

El último paso es validar que el token de usuario es válido; una vez pulsado en Next, me aparecen los datos del JWT decodificados, con el JWT con todos los datos de mi usuario. ¡Proceso completado con éxito!

¡Y eso es todo! Sorprendentemente rápido de configurar; ahora me toca hacer una app que haga de Service Provider, pero será otro día.