Ejemplo: Flujo del controlador de registro de proveedor de autenticación
Para crear un flujo de controlador de registro para el inicio de sesión único (SSO), personalice la plantilla Flujo de registro de usuario de proveedor de autenticación. La plantilla crea y actualiza usuarios internos y externos. Le muestra cómo utilizar las acciones invocables Obtener datos de usuario desde cadena JSON y Generar datos de usuario. También le muestra cómo gestionar asignaciones de conjuntos de permisos.
Ediciones necesarias
| Disponible en: Lightning Experience y Salesforce Classic |
| Disponible en: Enterprise Edition, Performance Edition, Unlimited Edition y Developer Edition |
Antes de empezar: Familiarizarse con flujos
Si es nuevo en flujos, utilice estos recursos para ponerse al día.
- Recursos Trailhead:
- Recursos de Ayuda de Salesforce
Ver el flujo
Para ver la plantilla, desde Configuración, ingrese Flujos en el cuadro Búsqueda rápida y, a continuación, seleccione Flujos. Haga clic en Nuevo flujo y seleccione la plantilla Registro de usuario de proveedor de autenticación.
El flujo consta de muchos elementos diferentes, incluyendo elementos de decisión, acción y asignación. Para ver detalles de un elemento específico, haga clic en el elemento. Recomendamos que haga clic en cada elemento cuando siga este documento.
También le recomendamos familiarizarse con las variables que se incluyen en este flujo. Para ver todas las variables, abra la Caja de herramientas. Para obtener más información acerca de una variable específica, como sus propiedades y dónde se utiliza en el flujo, haga clic en el nombre de la variable.
Cómo se inicia el flujo
El flujo comienza con un elemento Iniciar . Para este tipo de flujo, si el flujo está configurado como el controlador de registro en la definición del proveedor de autenticación, el flujo se inicia automáticamente durante SSO. Después de que el proveedor de identidad autentique al usuario, devuelve información de usuario a Salesforce. Salesforce utiliza esta información para crear un objeto Auth.UserData. En este punto, se inicia el flujo.
Obtener información del proveedor de identidad
El flujo comienza obteniendo información del proveedor de identidad. Cuando Salesforce crea el objeto Auth.UserData, expone la respuesta de información de usuario y el token de Id. del proveedor de identidad, si se devuelve. Para recuperar información específica de estas respuestas, puede utilizar la acción Obtener datos de usuario desde cadena JSON.
La acción toma dos parámetros de entrada. El primer parámetro de entrada es la Cadena de objeto JSON. En este parámetro, especifique la respuesta de información de usuario o el token de Id. Para especificar la respuesta de información de usuario o el token de Id., haga referencia a campos en el objeto Auth.UserData.
- La respuesta de información de usuario completa se almacena en el campo
userInfoJSONString. - La carga de token web JSON (JWT) descodificada del token de Id. se almacena en el campo
idTokenJSONString.
La plantilla contiene una variable definida por Apex, authUserData, para almacenar el objeto Auth.UserData . Utilice esta variable para hacer referencia a los campos userInfoJSONString o idTokenJSONString de authUserData como parámetro de entrada, como {!authUserData.userInfoJSONString}.
El segundo parámetro de entrada es la Clave de atributo JSON. En este parámetro, especifique la ruta de variable JSON para un atributo específico que desea recuperar. Por ejemplo, considere una cadena JSON con atributos anidados.
{"location": [ { "type": "office", "city": "San Francisco"}, {"type": "home", "city":"New York"}]}Para recuperar el valor del atributo type para la primera ubicación, utilice esta ruta de variable JSON: $.location[0].type.
La acción devuelve el valor del atributo y almacena el valor en una instancia de la clase de Apex JsonValueOutput. Para utilizarlo fácilmente más adelante en el flujo, asígnelo manualmente a una variable. Por ejemplo, en la plantilla, la acción recupera un valor de Id. de usuario y lo almacena en la variable federationIdentifier. Si va a la Caja de herramientas y hace clic en federationIdentifier, puede ver que esta variable definida por Apex utiliza la clase JsonValueOutput.
Este es un resumen de cómo funciona esta acción.
| Tarea | Elemento Flujo | Nombre de elemento de flujo en plantilla | Funcionamiento |
|---|---|---|---|
| Obtenga información de usuario desde el token de Id. o la respuesta de información de usuario devuelta por el proveedor de identidad. | Obtener datos de usuario desde acción invocable Cadena JSON | Obtener datos de usuario desde cadena JSON | Esta acción toma dos parámetros de entrada:
La acción devuelve el valor del atributo especificado en la Clave de atributo JSON. Cada acción devuelve una instancia de la clase de |
Decidir si crear o actualizar un usuario
Después de que el flujo recupere información de usuario, es el momento de tomar la primera decisión en el flujo: si crear un usuario o actualizar un usuario existente. Para tomar esta decisión de varias partes, es importante comprender cómo Salesforce vincula los usuarios al proveedor de identidad.
Cuando un usuario inicia sesión en Salesforce a través de un proveedor de identidad utilizando el marco de trabajo del proveedor de autenticación, Salesforce crea un registro ThirdPartyAccountLink. Puede utilizar este registro en su flujo para determinar si un usuario concreto se ha autenticado previamente con este proveedor de identidad.
Para facilitar este proceso, Salesforce incluye una variable existingUserIdFromTpal en el flujo. Esta variable se marca como disponible para la entrada, lo que significa que el valor procede de fuera del flujo. En la plantilla, Salesforce establece automáticamente este valor cuando se ejecuta el flujo. Para establecer el valor, Salesforce utiliza el identificador externo del proveedor de identidad para buscar ThirdPartyAccountLink con un valor remoteIdentifier coincidente. Si Salesforce encuentra ThirdPartyAccountLink, almacena el valor de su UserId en la variable existingUserIdFromTpal.
Si el usuario se ha autenticado previamente con el proveedor de identidad, el usuario existe en Salesforce y el flujo puede continuar con la actualización del usuario. En la plantilla, hacemos referencia a un usuario que tiene ThirdPartyAccountLink como un usuario vinculado.
Si el usuario no se ha autenticado con el proveedor de identidad, no sabe si el usuario existe en Salesforce. Es posible que el usuario exista en Salesforce pero no haya utilizado este proveedor de identidad antes. Para determinar si el usuario existe, el flujo utiliza la información del proveedor de identidad devuelto en el objeto Auth.UserData. Busca un registro de usuario con valores de atributo que coinciden con valores en el objeto Auth.UserData.
Si el flujo encuentra un usuario coincidente, actualiza la información de usuario del proveedor de identidad. En la plantilla, hacemos referencia a un usuario que existe pero que no tiene ThirdPartyAccountLink como un usuario existente. Si el flujo no encuentra un usuario coincidente, es el momento de crear un usuario.
A continuación le mostramos cómo la plantilla completa estas tareas.
| Tarea | Tipo de elemento de flujo | Nombre de elemento de flujo en plantilla | Funcionamiento |
|---|---|---|---|
| Decida si puede actualizar el usuario inmediatamente o debe continuar buscando un usuario basándose en si el usuario se autenticó previamente con este proveedor de identidad | Decisión | ¿Está vinculada una cuenta externa? | Comprueba si existe ThirdPartyAccountLink buscando un valor para la variable existingUserIdFromTpal. Si existingUserIdFromTpal es nulo, el resultado es No y el flujo continúa al elemento Buscar usuario existente. Si existe un valor para existingUserIdFromTpal, el resultado es Sí y el flujo continúa para actualizar el usuario vinculado. |
Si el usuario no se ha autenticado anteriormente con el proveedor de identidad, busque un registro de usuario existente que coincida con la información del
Auth.UserData objeto. |
Obtener registros | Buscar usuario existente | Busca un registro de usuario con atributos, como dirección de email, que coincidan con atributos del objeto En la plantilla, el elemento filtra registros de usuario donde el valor del campo Email en el registro de usuario coincide con el valor del campo |
| Decidir si actualizar o crear un usuario | Decisión | ¿Se encontró un usuario existente? | Determina si crear un usuario o actualizar un usuario existente comprobando si el elemento Buscar usuario existente devolvió un registro de usuario. Si la acción Buscar usuario existente devolvió un Id. de usuario, el resultado es Sí y el flujo continúa para actualizar el usuario existente. Si no hay ningún usuario coincidente, el resultado es No y el flujo continúa para crear un usuario. |
Generar datos de usuario
Si determina que 1) el usuario no inició sesión anteriormente y 2) no hay información de usuario coincidente en Salesforce, es el momento de crear un usuario. Un requisito previo para crear un usuario es tener suficientes datos de usuario para crear un registro de usuario completo. En algunos casos, el proveedor de identidad no devuelve suficiente información para crear un registro de usuario completo en Salesforce. Si ese es el caso, utilice la acción invocable Generar datos de usuario para generar valores de marcador de posición para los datos de usuario que faltan. Puede actualizar los valores más adelante.
Esta acción no toma ningún parámetro de entrada. Su resultado es un conjunto de valores de marcador de posición para estos campos. Estos son los campos y los valores predeterminados.
| Campo de usuario | Valor de marcador de posición generado |
|---|---|
alias |
alias |
email |
placeholder-email@example.com |
emailEncodingKey |
Un valor predeterminado basado en el contexto de usuario. |
firstName |
placeholder-first-name |
languageLocaleKey |
Un valor predeterminado basado en el contexto de usuario. |
lastName |
placeholder-lass-name |
localeSidKey |
Un valor predeterminado basado en el contexto de usuario. |
timeZoneSidKey |
Un valor predeterminado basado en el contexto de usuario. |
username |
placeholder-username<uniqueNumber>@example.com Por ejemplo, placeholder-username17300000000000@example.com. El número exclusivo tiene 14 dígitos de longitud. |
Los datos de usuario generados se almacenan en una instancia de la clase Apex GeneratedUserData. Más adelante, cuando el flujo crea un usuario, establece los valores de campos en el objeto Usuario utilizando los resultados de esta acción. Este es un resumen de esta acción.
| Tarea | Tipo de elemento de flujo | Nombre de elemento de flujo en plantilla | Funcionamiento |
|---|---|---|---|
| Generar valores de marcador de posición para datos de usuario que no proporciona el proveedor de identidad | Acción invocable Generar datos de usuario | Generar datos de usuario | Genera valores de marcador de posición para los campos requeridos para crear un usuario, incluyendo un nombre de usuario de marcador de posición exclusivo. Haga referencia a los valores más adelante cuando cree un usuario. Por ejemplo, establezca el campo Alias en el objeto Usuario como {!GenerateUserData.generatedUserData.alias}. |
Decidir qué tipo de usuario crear
Si utiliza su flujo para organizaciones de Salesforce y sitios de Experience Cloud, incluya una forma de decidir si crear un usuario interno, como un empleado o contratista, o un usuario externo, como un cliente o socio. Existen diferentes requisitos para cada tipo de usuario. Los usuarios internos y externos requieren un perfil, pero los usuarios externos también requieren una cuenta y un contacto.
Para ayudar a decidir qué tipo de usuario crear, la plantilla incluye una variable booleana IsUserExternal que se utiliza como una entrada para el flujo. Salesforce establece automáticamente el valor de esta variable basándose en si el usuario está iniciando sesión en una organización de Salesforce o un sitio de Experience Cloud.
| Tarea | Tipo de elemento de flujo | Nombre de elemento de flujo en plantilla | Funcionamiento |
|---|---|---|---|
| Determinar si crear un usuario interno o externo | Decisión | ¿Es el usuario externo? | En la plantilla, esta decisión comprueba si el valor del valor booleano isExternalUser es verdadero o falso. Si el usuario es un usuario interno, el resultado es No y el flujo procede a asignar un perfil y crear el usuario. Si el usuario es un usuario externo, el resultado es Sí y el flujo continúa para asignar una cuenta y un contacto al usuario. |
Gestionar asignaciones de perfiles para nuevos usuarios
Para crear un usuario interno o externo, debe asignar un perfil. Salesforce admite estas formas de especificar el perfil predeterminado.
- Especifique un perfil predeterminado cuando defina su proveedor de autenticación. La variable defaultProfileId en la plantilla almacena automáticamente este valor.
- Especifique un perfil predeterminado en su flujo.
Si especifica un perfil predeterminado en la definición del proveedor de autenticación y el flujo, Salesforce utiliza el valor especificado en el flujo.
La plantilla le muestra ambas formas de establecer un perfil. Para usuarios externos, la plantilla utiliza el perfil especificado en el proveedor de autenticación y no hay pasos adicionales en el flujo para establecer un perfil.
Para usuarios internos, la plantilla especifica un perfil predeterminado en el flujo utilizando un elemento Obtener registros.
| Tarea | Tipo de elemento de flujo | Nombre de elemento de flujo en plantilla | Funcionamiento |
|---|---|---|---|
| Establezca un perfil predeterminado para nuevos usuarios. | Obtener registros | Obtener perfil de usuario | Busca un perfil específico y luego actualiza la variable defaultProfileId para almacenar este valor. La plantilla filtra por nombre de perfil para encontrar el perfil Usuario estándar. La acción está configurada para almacenar el Id. del perfil coincidente en la variable defaultProfileId. |
Gestionar la asignación de cuentas y contactos para nuevos usuarios externos
Para crear un usuario externo, debe asignarlo a una cuenta y crear un contacto que asocie el usuario con la cuenta. Salesforce admite diferentes formas de asignar la cuenta predeterminada para nuevos usuarios externos.
- Especifique una cuenta predeterminada cuando defina su proveedor de autenticación. La variable defaultAccountId en la plantilla almacena automáticamente este valor.
- Cree una cuenta predeterminada en su flujo.
Si especifica una cuenta predeterminada en la definición del proveedor de autenticación y en el flujo, Salesforce utiliza el valor especificado en el flujo.
A continuación le mostramos cómo la plantilla aborda estos pasos.
| Tarea | Tipo de elemento de flujo | Nombre de elemento de flujo en plantilla | Funcionamiento |
|---|---|---|---|
| Decida si crear una cuenta predeterminada comprobando si se especifica una cuenta predeterminada en la definición del proveedor de autenticación. | Decisión | ¿Está definida la cuenta predeterminada? | En la plantilla, esta decisión comprueba si existe un valor en la variable defaultAccountId. Salesforce establece automáticamente el valor de esta variable basándose en la cuenta predeterminada especificada en la definición del proveedor de autenticación. Si es Sí, el flujo utiliza el valor de la variable defaultAccountId para el nuevo usuario. Si no, el flujo crea una cuenta. |
| Si no se especifica ninguna cuenta predeterminada en la definición del proveedor de autenticación, cree una cuenta predeterminada para nuevos usuarios. | Crear registros | Crear cuenta | Crea una cuenta denominada Inicio de sesión en redes sociales y la asigna como defaultAccountId. Para crear solo una cuenta la primera vez que se ejecuta el flujo, recomendamos que configure este elemento para evitar registros duplicados. Si existe una cuenta denominada Inicio de sesión de redes sociales, el flujo no crea una cuenta. |
| Crear un contacto para el nuevo usuario | Crear registros | Crear contacto | Crea un contacto con información del objeto Auth.UserData y asocia el contacto con la cuenta predeterminada estableciendo el campo Id. de cuenta en el valor de la variable defaultAccountId. |
Crear un usuario y gestionar conjuntos de permisos
Después de que el flujo gestione asignaciones de perfil, cuenta y contacto para nuevos usuarios, finalmente crea el registro de usuario y asigna conjuntos de permisos. Para esta sección del flujo, es importante completar estos pasos en este orden.
- (1) Cree el registro de usuario.
- (2) Asigne el nuevo Id. de usuario a la variable userIdOutput. En segundo plano, Salesforce utiliza esta variable para completar asignaciones de conjuntos de permisos.
- (3) Asigne conjuntos de permisos al usuario creado.
Tras el tercer paso, el proceso de creación de usuarios está completo. Cuando un usuario inicia sesión y el flujo determina que no existen en Salesforce, el flujo crea un registro de usuario. El proceso de inicio de sesión también crea ThirdPartyAccountLink. La próxima vez que el usuario inicie sesión, el flujo lo tratará como un usuario vinculado.
| Tarea | Tipo de elemento de flujo | Nombre de elemento de flujo en plantilla | Funcionamiento |
|---|---|---|---|
| Cree el usuario. | Crear registros | Crear usuario | Crea un registro de usuario utilizando información del objeto Auth.UserData para algunos campos, como el nombre. Para otros campos, utiliza los valores de marcador generados por la acción Generar datos de usuario, como {!GenerateUserData.generatedUserData.alias}. Otros valores, como language, se establecen directamente en el flujo. El contacto se establece como el Id. de contacto desde el elemento Crear contacto. |
| Asigne el Id. de usuario para el nuevo usuario a una variable de salida de modo que el tiempo de ejecución de Salesforce pueda completar asignaciones adicionales, como la asignación de conjuntos de permisos. Este paso es obligatorio cuando crea un usuario. | Asignación | Asignar Id. de usuario creado a variables de salida | Asigna el Id. de usuario para el usuario creado a la variable userIdOutput. |
| Controlar el acceso de usuarios agregando conjuntos de permisos | Asignación | Gestionar conjuntos de permisos para usuario creado | Agrega conjuntos de permisos al usuario existente actualizado basándose en el nivel de acceso deseado. La plantilla de flujo utiliza la variable permissionSetsToAdd para almacenar los nombres de API del conjunto de permisos. No puede eliminar conjuntos de permisos de un usuario creado. Si incluye permissionSetsToRemove en esta asignación, el flujo falla con un error de ejecución. |
Actualizar un usuario existente
Ahora que revisamos los pasos para crear un usuario, veamos los procesos para actualizar usuarios. En la plantilla, vuelva a la decisión ¿Se encontró un usuario existente?. Si el resultado de esta decisión es Sí, significa que 1) el usuario que inició sesión no tiene ThirdPartyAccountLink y 2) el usuario existe en Salesforce. Hacemos referencia a un usuario que cumple estos criterios como un usuario existente.
Para actualizar el usuario existente con información del proveedor de identidad, utilice un elemento Actualizar registros para extraer información del objeto Auth.UserData en el registro de usuario. Opcionalmente, puede decidir agregar o eliminar conjuntos de permisos dependiendo del nivel de acceso que desea que tenga el usuario.
Cuando un usuario inicia sesión y el flujo determina que existe en Salesforce pero no tiene ThirdPartyAccountLink, el flujo actualiza el usuario. El proceso de inicio de sesión también crea ThirdPartyAccountLink. La próxima vez que este usuario inicie sesión, el flujo lo tratará como un usuario vinculado.
A continuación le mostramos cómo la plantilla realiza estos pasos.
| Tarea | Tipo de elemento de flujo | Nombre de elemento de flujo en plantilla | Funcionamiento |
|---|---|---|---|
| Actualizar el usuario existente con información del proveedor de identidad | Actualizar registros | Actualizar usuario existente | Actualiza el registro de usuario existente con información del objeto Auth.UserData. Para especificar el registro de usuario, filtra registros donde el Id. de usuario coincide con el Id. de usuario devuelto por el elemento Buscar usuario existente ({!FindExistingUser.Id}). |
| Asigne el Id. de usuario para el usuario existente actualizado a una variable de salida de modo que el tiempo de ejecución de Salesforce pueda completar asignaciones adicionales, como la asignación de conjuntos de permisos. Este paso es obligatorio cuando crea un usuario, pero no se requiere para actualizar un usuario existente. Puede incluirlo para mayor coherencia u optar por eliminarlo por completo. | Asignación | Asignar Id. de usuario actualizado a variable de salida | Actualiza el valor de la variable userIdOutput al Id. de usuario existente. |
| Controlar el acceso de usuarios agregando o eliminando conjuntos de permisos | Asignación | Gestionar conjuntos de permisos para usuario actualizado | Agrega o elimina conjuntos de permisos del usuario existente actualizado basándose en el nivel de acceso deseado. La plantilla de flujo utiliza las variables permissionSetsToAdd y permissionSetsToRemove para almacenar los nombres de API del conjunto de permisos. |
Actualizar un usuario vinculado
En la plantilla, vuelva a la decisión ¿Está vinculada una cuenta externa?. Si el resultado de esta decisión es Sí, significa que el usuario que inició sesión tiene ThirdPartyAccountLink y, por lo tanto, existe en Salesforce. Hacemos referencia a un usuario con ThirdPartyAccountLink como un usuario vinculado. El flujo puede continuar para actualizar el usuario vinculado basándose en información del proveedor de identidad. Estos pasos son similares a los pasos para actualizar un usuario existente.
| Tarea | Tipo de elemento de flujo | Nombre de elemento de flujo en plantilla | Funcionamiento |
|---|---|---|---|
| Actualizar el usuario vinculado con información del proveedor de identidad | Actualizar registros | Actualizar usuario vinculado | Actualiza el registro de usuario vinculado con información del objeto Auth.UserData así como el identificador devuelto desde la acción Obtener datos de usuario desde cadena JSON (almacenado en la variable federationIdentifier). Para especificar el registro de usuario, filtra registros donde el Id. de usuario coincide con el valor de la variable existingUserIdFromTpal. |
| Asigne el Id. de usuario para el usuario existente actualizado a una variable de salida de modo que el tiempo de ejecución de Salesforce pueda completar asignaciones adicionales, como la asignación de conjuntos de permisos. Este paso es obligatorio cuando crea un usuario, pero no se requiere para actualizar un usuario vinculado. Puede incluirlo para mayor coherencia u optar por eliminarlo por completo. | Asignación | Asignar Id. de usuario vinculado a variable de salida | Actualiza el valor de la variable userIdOutput al Id. de usuario vinculado. |
| Controlar el acceso de usuarios agregando o eliminando conjuntos de permisos | Asignación | Gestionar conjuntos de permisos para usuarios vinculados | Agrega o elimina conjuntos de permisos del usuario vinculado actualizado basándose en el nivel de acceso deseado. La plantilla de flujo utiliza las variables permissionSetsToAdd y permissionSetsToRemove para almacenar los nombres de API del conjunto de permisos. |
Siguientes pasos
Cuando comprenda cómo funciona cada parte de la plantilla, personalice la plantilla para su caso de uso. Agregue su flujo cuando defina el proveedor de autenticación.
Asegúrese de comprender cómo probar, implementar y monitorear su flujo. Para obtener más información, consulte estos recursos.

