OAuth 2.0 para aplicaciones de primera parte: Flujo de registro desatendido para clientes privados
Para configurar un proceso de registro de usuario desatendido para una aplicación sin plataforma desarrollada por su compañía, utilice este flujo, que implementa el protocolo estándar borrador de OAuth 2.0 para aplicaciones de primera parte. Este flujo solo se admite para clientes privados, como aplicaciones cliente-servidor. Con este flujo, puede controlar completamente la experiencia de registro de front-end en su aplicación de primera parte mientras Salesforce controla el trabajo de backend de autenticar usuarios y otorgar acceso a recursos protegidos. Este flujo solo se admite para clientes privados, como aplicaciones cliente-servidor, y solo se admite para usuarios externos.
Ediciones necesarias
| Disponible en: Salesforce Classic y Lightning Experience |
| Disponible en: Enterprise Edition, Unlimited Edition y Developer Edition |
Para configurar el registro desatendido para un cliente privado, también puede utilizar esta versión del flujo Código de autorización y credenciales, que implementa las API de identidad desatendida. Ambos flujos realizan el mismo caso de uso: registro para una aplicación fuera de Salesforce Platform. Pero hay algunas diferencias clave a tener en cuenta.
| OAuth para aplicaciones propias | API de identidad desatendida |
|---|---|
| Admitido solo para clientes privados. | Admitido para clientes públicos y privados. |
| Se ajusta al protocolo estándar borrador de OAuth 2.0 para aplicaciones de primera parte. | Flujo de Salesforce patentado que está construido sobre el estándar de OAuth 2.0. |
| Solo se admite para el marco de trabajo de la aplicación cliente externa Salesforce. Del mismo modo, la única forma de configurar parámetros de aplicación cliente externa para este flujo es a través de la API de metadatos. | Compatible con la aplicación cliente externa Salesforce y los marcos de trabajo de aplicaciones conectadas. |
| Por seguridad, este flujo siempre requiere un JWT de certificado de cliente. Salesforce utiliza el JWT de certificado de cliente para validar que la aplicación fue desarrollada por su compañía. | Por seguridad, requiere autenticación o reCAPTCHA, pero no un JWT de certificado de cliente. |
Antes de configurar este flujo, complete estos pasos.
- Complete los requisitos previos para Identidad desatendida.
- Generar un JWT de certificación de cliente.
- Configure una aplicación cliente externa de Salesforce.
- Configure ajustes de Experience Cloud.
A continuación se muestra una descripción general del funcionamiento del flujo.
- Paso 1: Un usuario final abre su aplicación de primera parte y hace clic en Registrar.
- Paso 2: En su aplicación, muestra de forma nativa un formulario de registro para recopilar datos de usuario. Usted diseña este formulario y personaliza la información que desea recopilar.
- Paso 3: El usuario ingresa su información en su aplicación. Por ejemplo, ingresa su nombre de usuario, contraseña y nombre.
- Paso 4: Su aplicación acuña un JWT de certificado de cliente. También genera parámetros para la extensión Proof Key for Code Exchange (PKCE).
- Paso 5: Para inicializar el registro, su aplicación envía la información de usuario al extremo services/oauth2/v1/authorization_challenge en su sitio de Experience Cloud. La solicitud incluye un JWT de certificado de cliente.
- Paso 6: Para confirmar que su aplicación externa envió la solicitud, Salesforce valida el JWT de certificado de cliente y luego valida los otros parámetros enviados en la solicitud.
- Paso 7: Cuando la solicitud se realiza correctamente, Salesforce devuelve una respuesta con una
auth_session. La respuesta indica que Salesforce inicializó el registro y envió una contraseña simultánea (OTP) al usuario. - Paso 8: En su aplicación, muestra de forma nativa un formulario de verificación. Selecciona cómo desea que se muestre este formulario.
- Paso 9: El usuario recibe su OTP y la ingresa en el formulario de verificación.
- Paso 10: Para solicitar un código de autorización, su aplicación envía otra solicitud POST al extremo services/oauth2/v1/authorization_challenge. La solicitud incluye el parámetro
auth_sessiony la contraseña simultánea (OTP). - Paso 11: Si la solicitud se realiza correctamente, Salesforce devuelve un código de autorización a su aplicación y finaliza el
auth_session. - Paso 12: Para intercambiar el código por un token de acceso, su aplicación de primera parte envía una solicitud al extremo /services/oauth2/token.
- Paso 13: Salesforce devuelve una respuesta de token que contiene el token de acceso.
- Paso 14: Su aplicación de primera parte procesa la respuesta del token y crea la sesión del usuario.
- Paso 15: El usuario ahora inició sesión y realiza una acción en su aplicación que inicia una solicitud de datos de Salesforce.
- Paso 16: Su aplicación realiza una solicitud autenticada a un extremo de Salesforce protegido, como una API de Salesforce.
- Paso 17: El usuario ahora puede acceder a sus datos protegidos en su aplicación.
Paso 1: El usuario abre la aplicación de primera parte y hace clic en Registrar
Un usuario abre su aplicación de primera parte y hace clic en un vínculo de registro. O bien hacen clic en un vínculo para acceder a un recurso que requiere registro.
Paso 2: La aplicación de primera parte muestra el formulario de registro
En su aplicación de primera parte, muestra de forma nativa un formulario de registro para recopilar información acerca del usuario. Usted controla todo acerca de este formulario, incluyendo su aspecto, su comportamiento y la información de usuario que desea recopilar.
Existen algunas consideraciones sobre la información que desea recopilar de usuarios. Cuando su aplicación envía información de usuario al extremo de desafío de autorización, Salesforce comprueba una dirección de email, un nombre de usuario, un apellido y una contraseña. Puede recopilar esta información a usuarios o generarla automáticamente, pero debe incluirse en su solicitud POST. Cuando decida qué información incluir, asegúrese de recopilar una dirección de email o número de teléfono de modo que el usuario pueda verificar su identidad.
Paso 3: El usuario ingresa su información
En el formulario de registro de su aplicación, el usuario ingresa su información.
Paso 4: La aplicación de primera parte acuña un JWT de certificado de cliente y genera valores de code_verifier y code_challenge para PKCE
La aplicación acuña un JWT de certificado de cliente.
La aplicación también genera valores para los parámetros PKCE utilizados para verificar el código de autorización.
Para obtener más información sobre PKCE, consulte la especificación RFC 7636: Clave de prueba para el intercambio de códigos por clientes públicos de OAuth proporcionado por Internet Engineering Task Force (IETF).
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.
Paso 5: La aplicación envía una solicitud inicial al extremo de reto de autorización
Desde el navegador, su aplicación envía una solicitud POST al extremo services/oauth2/v1/authorization_challenge en su sitio de Experience Cloud.
Incluya este encabezado en su solicitud si es necesario.
| Encabezado | ¿Obligatorio? | Descripción |
|---|---|---|
Authorization: Bearer
|
Este encabezado es obligatorio si activa Requerir autenticación para acceder a esta API en la sección Inicio de sesión y registro de Experience Cloud. | Contiene un token de acceso emitido a un usuario de integración interno. Para obtener el token de acceso, puede utilizar cualquier flujo de OAuth estándar que admita Salesforce. Asegúrese de asignar el ámbito user_registration_api a su aplicación conectada o aplicación cliente externa, o páselo como un parámetro durante su flujo. |
Incluya estos parámetros en el cuerpo de la solicitud.
| Parámetro | ¿Obligatorio? | Descripción |
|---|---|---|
password
|
Sí. | La contraseña del usuario. La contraseña está sujeta a cualquier política de contraseña configurada para el perfil o la organización. |
userdata
|
Sí. Incluso si no recopila esta información del usuario, la debe generar automáticamente y pasarla en el parámetro userdata. |
Contiene toda la información de usuario obligatoria. Como mínimo, Salesforce precisa de esta información en el parámetro
|
recaptcha
|
Obligatorio si se le aplican estas condiciones:
|
Un token cifrado emitido por la API de reCAPTCHA de Google cuando un usuario completa un reto de reCAPTCHA. |
recaptchaevent
|
Obligatorio si se le aplican estas condiciones:
|
Un objeto JSON que contiene estos subparámetros.
Para obtener más información, consulte la documentación reCAPTCHA de Google. |
client_assertion
|
Sí. | El JWT de certificado de cliente que generó, firmado por el certificado configurado para su aplicación cliente externa. |
login_type
|
No. Si no incluye este parámetro, Salesforce toma como valor predeterminado la verificación de la identidad del usuario con email. | El método utilizado para verificar la identidad del usuario. Salesforce admite dos valores para el método de verificación: email y sms. |
customdata
|
No. | Contiene cualquier información de usuario personalizada que recopile. Por ejemplo, puede incluir la dirección de calle del usuario. |
emailtemplate
|
Se requiere especificar varias plantillas de email si se activa la lista de admisión de plantillas de email. Si no activó la lista de admisión de plantillas de email, no puede incluir este parámetro. Si no incluye este parámetro, Salesforce utiliza la plantilla de email predeterminada configurada en su configuración de Experience Cloud, independientemente de si la lista de admisión está activada. Si no hay ninguna plantilla configurada, Salesforce utiliza una plantilla de email OTP predeterminada. |
El nombre del desarrollador de la plantilla de email personalizada. Este parámetro solo puede incluir una plantilla de email desde la lista de admisión. |
code_challenge
|
Obligatorio si requería PKCE para su aplicación cliente externa. Para que las funciones de seguridad de este flujo funcionen correctamente, recomendamos encarecidamente que siempre requiera PKCE. | Especifica el valor de hash SHA256 del valor Si se proporciona un desafío Si el desafío |
A continuación se incluye un ejemplo de solicitud de registro inicial.
POST /services/oauth2/v1/authorization_challenge? HTTP 1.1
Host: MyExperienceCloudSite.my.site.com
{
"userdata": {
"firstname": "Janice"
"lastname": "Edwards"
"email": "janice.edwards@example.com"
"username": "jedwards@myapp.com"
}
"customdata": {
"mobilePhone"="<mobile phone number>"
}
"password":"*********"
"recaptcha": "*******"
"login_type": "email"
"emailtemplate": "unfiled$public/SalesNewCustomerEmail"
"client_assertion": "Y2xpZW50YXNzZXJ0aW9u..."
}Paso 6: Salesforce valida la solicitud
Salesforce intenta primero validar el token JWT de certificado de cliente validando que la firma pasada en el parámetro client_asssertion coincida con la firma para el certificado configurado de la aplicación cliente externa.
Si el JWT de certificado de cliente no es válido, Salesforce devuelve un error invalid_attestation y hay que volver a enviar la solicitud con todos los parámetros que se enviaron originalmente. A continuación se incluye un ejemplo de respuesta de error.
Si el JWT del certificado de cliente es válido, pero hay otros problemas con la solicitud, Salesforce devuelve una respuesta de error especificando qué falla con la solicitud. La respuesta también incluye un parámetro auth_session que es válido durante 5 minutos tras su emisión. Durante el periodo de tiempo en el que la sesión auth_session es válida, la puede utilizar para volver a enviar la solicitud. En las versiones corregidas que vuelva a enviar, incluya solo los valores corregidos para los parámetros que provocaron el fallo de la solicitud. También debe volver a enviar la password con cada solicitud porque Salesforce no la almacena. Los otros parámetros que no provocaron el fallo de la solicitud se pueden excluir. Ya están representados por auth_session.
auth_session, pero puede volver a enviar la solicitud sin ellos, a no ser que hayan causado el fallo de la solicitud.Por ejemplo, si su token JWT de certificado de cliente es válido pero la solicitud falla porque el nombre de usuario no era correcto, vuelva a enviar una solicitud que incluya solo la sesión auth_session, el username y la password.
Paso 7: Salesforce envía una OTP al usuario
Si la solicitud se realiza correctamente, Salesforce aún devuelve una respuesta de error porque aún no puede otorgar el código de autorización. Pero esta vez, la respuesta de error indica que se inicializó el inicio de sesión y que Salesforce envió una OTP a la dirección de email o el número de teléfono del usuario. Para confirmar que la solicitud se realizó correctamente, busque el código de error login_initialized y el estado otp_sent. La respuesta también incluye un parámetro auth_session, que es importante para el siguiente paso.
A continuación se incluye un ejemplo de respuesta.
HTTP/1.1 403 Forbidden
Content-Type: application/json
Cache-Control: no-store
{
"error": "authorization_required",
"auth_session": "uY29tL2F1dGhlbnRpY",
"error_code": "login_initialized",
"login_status": {
"type": "SMS",
"state": "otp_sent",
"displayData": "+120******58"
}
}Paso 8: Su aplicación muestra de forma nativa un formulario de verificación
En su aplicación de primera parte, muestra un formulario de verificación donde el usuario final puede ingresar su OTP. El aspecto de este formulario depende completamente de usted.
Paso 9: El usuario ingresa OTP en el formulario de verificación
El usuario recibe la OTP y la ingresa en el formulario de verificación en su aplicación de primera parte.
Paso 10: Su aplicación solicita un código de autorización
Para solicitar un código de autorización, su aplicación envía el parámetro auth_session y la contraseña simultánea (OTP por sus siglas en inglés) que el usuario especificó al extremo de reto de autorización utilizando otra solicitud POST a services/oauth2/v1/authorization_challenge. Esta solicitud no tiene encabezados obligatorios. Incluya estos parámetros en el cuerpo de la solicitud.
| Parámetro | ¿Obligatorio? | Descripción |
|---|---|---|
auth_session
|
Sí. | Representa el intento de inicio de sesión. Utilice el valor auth_session que recibió en la respuesta desde su primera solicitud al extremo del reto de autorización. Asegúrese de utilizar el auth_session desde la solicitud que indica que se ha inicializado el inicio de sesión y se envió la contraseña simultánea OTP. |
login_otp
|
Sí. | La OTP que el usuario final ingresó en el formulario de verificación de su aplicación. |
A continuación se incluye un ejemplo de solicitud.
POST /authorize HTTP/1.1
Host: MyExperienceCloudSite.my.site.com
auth_session=uY29tL2F1dGhlbnRpY*
login_otp=<otp_from_sms>Paso 11: Salesforce devuelve un código de autorización
Si la OTP es correcta y la solicitud auth_session es válida, Salesforce devuelve un código de autorización y finaliza la auth_session. A continuación se incluye un ejemplo de respuesta de código de autorización.
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
{
"authorization_code": "uY29tL2F1d******"
}Paso 12: Su aplicación intercambia el código de autorización por un token de acceso
Después de obtener el código de autorización, su aplicación envía una solicitud al extremo del token de Salesforce.
Esta solicitud no tiene encabezados. 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. |
client_secret
|
Sí. | El secreto de consumidor de la aplicación cliente externa. En este flujo, actúa como una contraseña que la aplicación utiliza para acceder a Salesforce. |
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 cliente externa. De lo contrario, la aprobación falla. Este valor debe tener codificación de URL. |
grant_type
|
Sí. | El tipo de validación que la aplicación puede proporcionar para probar que es un visitante seguro. Para este flujo, el valor debe ser authorization_code. |
code_verifier
|
Obligatorio si requería PKCE para su aplicación cliente externa. Para que las funciones de seguridad de este flujo funcionen correctamente, recomendamos encarecidamente que siempre requiera 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 una solicitud de token de ejemplo.
POST services/oauth2/token? HTTP 1.1
Host: MyExperienceCloudSite.my.site.com
code=********&
client_id=**********&
client_secret=*********&
redirect_uri=<callback_URL>&
grant_type=authorization_code&
code_verifier=*******Paso 13: Salesforce otorga un token de acceso
Después de validar las credenciales de la aplicación. Salesforce devuelve un token de acceso. A continuación se incluye un ejemplo de respuesta de token de acceso en formato JSON.
{
"access_token":"*******************",
"sfdc_community_url":"https://MyDomainName.my.site.com",
"sfdc_community_id":"0DBxxxxxxxxxxxx",
"signature":"ts6wm/svX3jXlCGR4uu+SbA04M6qhD1SAgVTEwZ59P4=",
"scope":"openid api",
"id_token":"XXXXXX",
"instance_url":"https://yourInstance.salesforce.com",
"id":"https://yourInstance.salesforce.com/id/00Dxxxxxxxxxxxx/005xxxxxxxxxxxx",
"token_type":"Bearer",
"issued_at":"1667600739962"
}La respuesta del token de acceso contiene estos parámetros.
| Parámetro | ¿Obligatorio? | Descripción |
|---|---|---|
access_token
|
Sí. | Token de OAuth que una aplicación cliente externa utiliza para solicitar el acceso a un recurso protegido en nombre de la aplicación cliente. Pueden acompañar permisos adicionales en la forma de ámbitos al token de acceso. |
id
|
Sí. | Una URL de identidad que se puede utilizar para identificar al usuario y para consultar con el fin de obtener más información acerca del usuario. Consulte URL de identidad. |
id_token
|
No. | Una estructura de datos firmada que contiene atributos de usuario autenticados, incluyendo un identificador único para el usuario y una marca de tiempo que indica el momento en que se emite el token. También identifica la aplicación solicitante. Consulte Especificaciones de OpenID Connect. |
instance_url
|
Sí. | Una URL que indica la instancia de la organización del usuario. Por ejemplo, https://yourInstance.salesforce.com/. |
issued_at
|
Sí. | Una marca de hora de la creación de la firma, expresada como el número de milisegundos desde 1970-01-01T0:0:0Z UTC. |
refresh_token
|
No. | Token obtenido del servidor web, usuario-agente o flujo de token de aplicación híbrida. Se trata de un valor secreto. Tome las medidas apropiadas para protegerlo. Este parámetro se devuelve únicamente si su aplicación cliente externa o aplicación conectada se configura con un ámbito refresh_token. |
signature
|
Sí. | Firma HMAC-SHA256 con codificación Base64 firmada con client_secret. La firma puede incluir el Id. concatenado y el valor de issued_at, que puede utilizar para verificar que la dirección URL de identidad no ha cambiado desde que la envió el servidor. |
sfdc_community_url
|
Sí. | La URL del sitio de Experience Cloud. |
sfdc_community_id
|
Sí. | El Id. de sitio de Experience Cloud del usuario. |
state
|
No. | El estado solicitado por el cliente. Este valor solo se proporciona si el parámetro state está incluido en la cadena de consulta original. |
token_type
|
Sí. | Un tipo de token Bearer, que se utiliza para todas las respuestas que incluyen un token de acceso. |
Paso 14: La aplicación crea la sesión del usuario
Su aplicación procesa la respuesta del token y crea la sesión del usuario.
Paso 15: El usuario está registrado y realiza una acción en la aplicación
Su usuario está ahora registrado e inició sesión. Realiza una acción en su aplicación que requiere acceso a datos de Salesforce. Por ejemplo, hace clic en un botón para ver su historial de reserva de viajes, que se almacena en Salesforce.
Paso 16: La aplicación realiza una llamada autenticada a un extremo de Salesforce
Para acceder a los datos de Salesforce del usuario, su aplicación utiliza el token de acceso para realizar una llamada autenticada a un extremo de Salesforce protegido, como una API de Salesforce.
Paso 17: El usuario puede acceder a datos de Salesforce
El usuario puede ahora acceder a datos de Salesforce protegidos en su aplicación. Por ejemplo, puede ver su historial de reserva de viajes.

