API de identidad desatendida: Flujo de invitados desatendido para clientes públicos
Algunos usuarios interactúan con su aplicación de plataforma externa pero no inician sesión o se registran. Puede emitir identificadores en la forma de Id. de visitante exclusivo (UVID) para estos visitantes desconocidos con el Flujo de invitados desatendido. Si el usuario decide iniciar sesión o registrarse, puede pasar el identificador a un flujo de usuario nombrado, como un flujo de inicio de sesión desatendido. Utilice la identidad de usuario invitado como una herramienta para llevar contexto desde sesiones de usuario invitado a sesiones de usuario nombradas. Este flujo es una variación del flujo Código de autorización y credenciales.
Ediciones necesarias
| Disponible en: Salesforce Classic (no disponible en todas las organizaciones) y Lightning Experience |
| Disponible en: Enterprise Edition, Unlimited Edition y Developer Edition |
Antes de configurar este flujo, complete estos pasos.
- Completar los requisitos previos para Identidad desatendida
- Integre su aplicación fuera de la plataforma con Salesforce utilizando una de estas opciones. Asegúrese de configurar políticas adicionales para el flujo de invitados.
Por ejemplo, aloja una aplicación de comercio electrónico fuera de la plataforma Salesforce. Desea que los usuarios puedan guardar artículos en un carrito sin iniciar sesión. Puede utilizar el flujo de usuario invitado para generar un UVID para el usuario, y puede almacenar la información del carrito del usuario y vincularla al UVID. Cuando el usuario inicia sesión o se registra por última vez, pasa el UVID en un flujo de registro o inicio de sesión desatendido. Puesto que tiene el contexto del carrito desde UVID, puede guardar los artículos del usuario, proporcionando a sus usuarios una mejor experiencia.
El ejemplo de carrito de compra es solo una de muchas posibilidades cuando se incluye el UVID y el flujo de invitado. Otras posibilidades incluyen comprender lo que hace que sus usuarios deseen inscribirse en su aplicación y recordar sus preferencias.
El flujo de invitado y UVID solo son compatibles con tokens de acceso basados en tokens Web de JSON (JWT). Para conectar el UVID a un usuario nombrado, debe configurar el flujo de usuario nombrado para emitir tokens de acceso basados en JWT también.
Estas instrucciones le indican cómo implementar el flujo para un cliente público, como una aplicación de una única página, que no puede mantener información confidencial privada. Los clientes públicos tienen algunas consideraciones de seguridad adicionales. Comparado con un cliente privado como una aplicación cliente-servidor, no tienen un backend privado para almacenar el secreto de consumidor, que actúa como una contraseña para proteger el intercambio de códigos. Sin ningún lugar para almacenar un secreto de consumidor, la aplicación no puede poner en peligro su filtración. Para sustituir la función del secreto de consumidor, puede utilizar la extensión Proof Key for Code Exchange (PKCE) en su lugar. Esta extensión protege su aplicación con parámetros que solo usted y Salesforce pueden verificar. Siempre recomendamos implementar PKCE para un cliente público.
Esta es una descripción general del flujo de invitados. Estos pasos cubren el flujo hasta el punto en que se identifica el usuario invitado, pero no se inicia sesión.
- El visitante desconocido llega a la aplicación o realiza una acción como hacer clic en un botón (1).
- La aplicación busca un UVID y si no encuentra uno, genera un valor.
- Si está utilizando la extensión Proof Key for Code Exchange (PKCE), que recomendamos encarecidamente, la aplicación genera parámetros de PKCE.
- Para obtener un código de autorización, su aplicación envía de forma desatendida el identificador UVID al extremo de autorizaciones de Salesforce (
services/oauth2/authorize) en una solicitud GET o POST. - Salesforce valida el UVID y devuelve un redireccionamiento 302 a una URL preconfigurada que contiene el código de autorización. El redireccionamiento se procesa dentro del navegador, y la respuesta se entrega de forma desatendida a su controlador de devolución de llamadas preconfigurado en el extremo de devolución de llamadas.
- El extremo de devolución de llamadas extrae el código de autorización y lo devuelve a su aplicación.
- Su aplicación recibe el código de autorización e inicia un intercambio de códigos enviando el código y otros parámetros en una solicitud POST al extremo de tokens de Salesforce (
services/oauth2/token). - Salesforce valida la solicitud y devuelve un token de acceso basado en JWT de invitado con el UVID en la reclamación de sujeto.
- Su aplicación procesa la respuesta y crea una sesión de invitado, manteniendo el valor UVID.
- El usuario final ahora tiene una sesión de invitado con la clave al valor UVID devuelto en el token de acceso.
Al igual que otras variaciones del flujo Código de autorización y credenciales, para un cliente público, este flujo requiere un extremo de devolución de llamadas que pueda gestionar el redireccionamiento 302 y devolver el código de autorización y otros parámetros a su aplicación. Si realiza el intercambio de códigos en su navegador, puede utilizar el extremo Salesforce /services/oauth2/echo. Analiza automáticamente el redireccionamiento 302, extrae los parámetros y los devuelve a su aplicación en formato JSON. Utilizamos el extremo echo en los ejemplos de código para este flujo.
El usuario final desconocido llega a su aplicación
El flujo se inicia cuando un usuario final visita su aplicación. También puede configurarlo para que se inicie cuando el usuario realice una acción, como por ejemplo, guardar un artículo en un carrito.
La aplicación genera un UVID
Su aplicación intenta encontrar un UVID asociado con este usuario. Por ejemplo, busca cookies de navegador de cualquier visita anterior a la aplicación. Si la aplicación no puede encontrar un UVID, genera uno. Salesforce no desempeña una función en la generación del UVID. Su generación, almacenamiento y mantenimiento dependen completamente de usted. El único requisito es que el UVID debe ser un identificador exclusivo universal de Versión 4 (v4 UUID).
La aplicación genera parámetros de PKCE
Si está utilizando PKCE, su aplicación genera parámetros de code_verifier y code_challenge.
La especificación de la extensión PKCE definida en RFC 7636 también incluye un parámetro code_challenge_method opcional que puede enviar en la solicitud de autorización. Salesforce no tendrá en cuenta cualquier valor que se envíe en este parámetro, y establecerá SHA256 de forma predeterminada.
La aplicación intercambia el UVID para un código de autorización
Su aplicación envía de forma desatendida una solicitud GET o POST al extremo de autorización de Salesforce en su sitio de Experience Cloud. La solicitud contiene el UVID y otros parámetros para identificar la aplicación y especificar el tipo de solicitud.
Tiene dos opciones para el modo en que envía el UVID en esta solicitud. Puede enviar un valor de UVID sin formato o enviar un token de acceso basado en JWT con el UVID acuñado en él. Por ejemplo, si tiene un token de acceso basado en JWT desde una sesión anterior, el envío del token al extremo de autorización es una forma sencilla de reutilizarlo sin analizarlo de forma específica para el UVID.
Incluya estos encabezados en su solicitud.
| Encabezado | ¿Obligatorio? | Descripción |
|---|---|---|
Uvid-Hint
|
Obligatorio si no envía el UVID en el cuerpo de la solicitud. Debe incluir siempre un UVID, ya sea que se envíe en el encabezado o en el cuerpo de la solicitud. | Contiene el UVID como un valor sin formato o un token de acceso basado en JWT con un UVID acuñado en él. Si envía el identificador UVID como un valor sin formato, incluya un prefijo Si envía un token de acceso basado en JWT con un identificador UVID, incluya un prefijo |
Auth-Request-Type
|
Sí. | Especifica el tipo de solicitud que desea realizar a Salesforce. Para el inicio de sesión sin contraseña desatendido, este valor debe establecerse en guest. |
Incluya estos parámetros en el cuerpo de la solicitud.
| Parámetro | ¿Obligatorio? | Descripción |
|---|---|---|
uvid_hint
|
Obligatorio si no incluye el UVID en el encabezado. | Contiene el UVID como un valor sin formato o un token de acceso basado en JWT con un UVID acuñado en él. Si envía el identificador UVID como un valor sin formato, incluya un prefijo Si envía un token de acceso basado en JWT con un identificador UVID, incluya un prefijo |
client_id
|
Sí. | La clave de consumidor de la aplicación cliente externa o la aplicación conectada. |
response_type
|
Sí. | El tipo de otorgamiento de OAuth 2.0 que solicita su aplicación. Como este flujo es una variación del flujo Código de autorización y credenciales, este valor debe ser code_credentials. |
redirect_uri
|
Sí. | La URL donde se redirige a los usuarios después de una autenticación satisfactoria. Para este flujo, puede utilizar el extremo de eco, |
code_challenge
|
Solo si está utilizando la extensión PKCE, que es lo recomendable, especialmente para un cliente público. | Especifica el valor de hash SHA256 del valor Si se proporciona un desafío Si el desafío |
scope
|
Sí. | Los permisos que definen el tipo de recursos protegidos a los que la aplicación conectada o la aplicación cliente externa puede acceder. Los valores que envía en esta solicitud deben coincidir o ser un subconjunto de los ámbitos asignados a su aplicación. Para obtener más información acerca de cada ámbito y su finalidad, consulte Tokens y ámbitos de OAuth. |
Consulte estas solicitudes de autorización de ejemplo, que implementan PKCE.
A continuación se incluye un ejemplo de solicitud donde el UVID se pasa como un valor sin formato en el encabezado de la solicitud.
POST /services/oauth2/authorize? HTTP 1.1
Host: MyExperienceCloudSite.my.site.com
Uvid-Hint: UVID abcd-1234-efgh
Auth-Request-Type: guest
response_type=code_credentials&
client_id=***********&
redirect_uri=https://www.MyExperienceCloudSite.my.site.com/services/oauth2/echo&
code_challenge=********&
scope=openid
En este ejemplo, el UVID se pasa en un token de acceso basado en JWT en el encabezado.
POST /services/oauth2/authorize? HTTP 1.1
Host: MyExperienceCloudSite.my.site.com
Uvid-Hint: JWT **************
Auth-Request-Type: guest
response_type=code_credentials&
client_id=***********&
redirect_uri=https://www.MyExperienceCloudSite.my.site.com/services/oauth2/echo&
code_challenge=********&
scope=openid
Este es un ejemplo donde el UVID se pasa como un valor sin formato en el cuerpo de la solicitud.
POST /services/oauth2/authorize? HTTP 1.1
Host: MyExperienceCloudSite.my.site.com
Auth-Request-Type: guest
uvid_hint=UVID abcd-1234-efgh&
response_type=code_credentials&
client_id=***********&
redirect_uri=https://www.MyExperienceCloudSite.my.site.com/services/oauth2/echo&
code_challenge=********&
scope=openid
Salesforce devuelve un redireccionamiento 302
Salesforce valida el UVID. Si se pasó el UVID como un valor sin formato, Salesforce valida su formato. Si se pasó como un token de acceso basado en JWT, Salesforce comprueba la validez del token.
Salesforce devuelve entonces un redireccionamiento HTTP 302 a una URL preconfigurada que contiene el código de autorización. Si el flujo se produce en el navegador, el redireccionamiento 302 se procesa en el navegador y Salesforce envía automáticamente la respuesta de redireccionamiento a la URL de redireccionamiento, que es el extremo de devolución de llamadas. Esta es una URL preconfigurada de ejemplo.
https://www.MyDomainName.my.site.com/services/apexrest/code/exchange?code=aPrxC1*******
&sfdc_community_url=https%3A%2F%2FMyDomainName.my.site.com&sfdc_community_id=0DBxxxxxxxxxxxxEl extremo de devolución de llamadas envía el código de autorización a su aplicación
El extremo de devolución de llamadas extrae el código de autorización y lo devuelve a su aplicación. En estos ejemplos de código, la dirección URL de redireccionamiento apunta al extremo de devolución de llamadas /services/oauth2/echo, en el sitio de Experience Cloud. Este extremo analiza automáticamente el redireccionamiento 302, extrae el código de autorización y otros parámetros y los devuelve a su aplicación en formato JSON.
La aplicación inicia el intercambio de código
Su aplicación recibe la respuesta de código con la autorización y otros parámetros. Intercambia el código por un token de acceso enviando una solicitud POST desatendida al extremo /services/oauth2/token.
Incluya un encabezado en la solicitud.
| Parámetro | ¿Obligatorio? | Descripción |
|---|---|---|
Auth-Request-Type
|
Sí. | Especifica el tipo de solicitud que desea realizar a Salesforce. Para el inicio de sesión sin contraseña desatendido, este valor debe establecerse en guest. |
Uvid-Hint
|
Sí. | Contiene el UVID como un valor sin formato o un token de acceso basado en JWT con un UVID acuñado en él. Para el intercambio de códigos, no incluya un prefijo para el UVID. Por ejemplo, si pasa el UVID como un valor sin formato, el encabezado es simplemente |
Incluya estos parámetros en el cuerpo de la solicitud.
| Parámetro | ¿Obligatorio? | Descripción |
|---|---|---|
code
|
Sí. | El servidor de autorización crea un código de autorización, que es un token efímero que pasa al cliente después de una autenticación correcta. El cliente envía el código de autorización al servidor de autorización para obtener un token de acceso y, opcionalmente, un token de actualización. |
client_id
|
Sí. | La clave de consumidor de la aplicación cliente externa o la aplicación conectada. |
redirect_uri
|
Sí. | La URL donde se redirige a los usuarios después de una autenticación satisfactoria. redirect_URI debe coincidir con uno de los valores del campo URL de devolución de llamada de la aplicación conectada. De lo contrario, la aprobación falla. Este valor debe tener codificación de URL. Para este flujo, puede utilizar el extremo de eco, |
grant_type
|
Sí. | El tipo de validación que la aplicación cliente externa o la aplicación conectada puede proporcionar para probar que es un visitante seguro. Como este flujo es una variación del flujo Código de autorización y credenciales, el valor debe ser authorization_code. |
code_verifier
|
Solo si está utilizando PKCE. | Especifica 128 bytes de datos aleatorios con alta entropía para hacer que intentar determinar el valor del código sea difícil. Establezca este parámetro para ayudar a evitar ataques de intercepción de códigos de autorización. El valor debe ser base64url-encoded (codificado con base64url) como se define en https://datatracker.ietf.org/doc/html/rfc4648#section-5. Si existe un valor de verificador Si el valor de verificador |
A continuación se incluye un ejemplo de solicitud de token que implementa PKCE. En este ejemplo, el UVID se envía como un valor sin formato.
POST services/oauth2/token? HTTP 1.1
Host: MyExperienceCloudSite.my.site.com
Uvid-Hint: abcd-1234-efgh
Auth-Request-Type: guest
code=********&
client_id=**********&
redirect_uri=https://MyExperienceCloudSite.my.site.com/services/oauth2/echo&
grant_type=authorization_code&
code_verifier=*******Salesforce otorga un token de acceso basado en JWT
Después de validar las credenciales de la aplicación. Salesforce devuelve un token de acceso basado en JWT de invitado y un estado al navegador. El token de acceso de invitado contiene el UVID en la reclamación (sub) del sujeto. Este es un fragmento de código de un token de acceso basado en JWT de ejemplo. Como recordatorio, estos tokens tienen tres componentes: un encabezado, una carga, y una firma. Este ejemplo le muestra la carga con el UVID en la reclamación sub. Como puede ver, el valor tiene uvid como prefijo.
{
"tnk": "example/00XXXXXX",
"ver": "1.0",
"kid": "CORE_ATJWT************",
"tty": "sfdc-core-token",
"typ": "JWT",
"alg": "RS256"
}
{
"scp": "open_id",
"aud": [
"https://example.com"
],
"sub": "uvid:abcd-1234-efgh",
"nbf": "1675197036",
"iss": "https://MyExperienceCloudSite.my.site.com",
"exp": "1675198836",
"iat": "1675197036",
jti”: xRb**********”
"client_id": "**********"
}Para obtener una explicación completa de cada reclamación en un token de acceso basado en JWT, consulte Tokens de acceso basados en JWT en la Ayuda de Salesforce.
La aplicación crea una sesión de invitado
Su aplicación procesa la respuesta del token de acceso y crea una sesión de invitado, manteniendo el valor UVID.
El usuario desconocido está ahora identificado
El usuario final desconocido ahora tiene una sesión de invitado vinculada al valor de UVID devuelto en el token de acceso basado en JWT. En este punto, depende de usted lo que desee hacer con el UVID. Para obtener información acerca de cómo pasarlo a un flujo de autorización de usuario nombrado, consulte API de Identidad desatendida: Ampliación del flujo de invitado desatendido en un flujo de usuario nombrado.

