Flujo servidor web de OAuth 2.0 para la integración de aplicaciones web
Para integrar una aplicación web externa con la API de Salesforce, utilice el flujo servidor web de OAuth 2.0, que implementa el tipo de otorgamiento de código de autorización de OAuth 2.0. Con este flujo, el servidor que aloja la aplicación web debe poder proteger la identidad de la aplicación cliente externa, definida por el Id. de cliente y el secreto de cliente.
Ediciones necesarias
| Disponible en: Salesforce Classic (no disponible en todas las organizaciones) y Lightning Experience |
| Disponible en: todas las ediciones |
Recomendamos que utilice el flujo de servidor web con Clave de prueba para Code for Exchange (PKCE, pronosticado pixi) en lugar del flujo usuario-agente o el flujo nombre de usuario-contraseƱa para escenarios especiales. Utilice los parĆ”metros code_challenge y code_verifier para implementar PKCE con el flujo de servidor web. Para obtener mĆ”s información sobre PKCE, consulte Grupo de tareas de ingenierĆa de Internet (IETF.). TambiĆ©n recomendamos que bloquee todas las aplicaciones cliente externas para que no utilicen el flujo usuario-agente o el flujo nombre de usuario-contraseƱa. Para los pasos, consulte Bloquear flujos de autorización para mejorar la seguridad.
Este es un caso de uso de ejemplo para implementar el flujo servidor web. Recientemente desarrolló un servicio web que permite el acceso seguro al estado de pedidos de clientes. Los datos de estado del pedido se almacenan de forma segura en su plataforma de CRM de Salesforce. Para autorizar a los usuarios de Mesa de ayuda a ver el estado de pedido de un cliente, desarrolla una aplicación Estado de pedido y la configura como una aplicación cliente externa con el flujo de servidor web.
- Un usuario del Centro de ayuda hace clic en la aplicación web Estado de pedido.
- La aplicación cliente externa publica una solicitud de código de autorización en el extremo de autorización de Salesforce.
- Se redirige al usuario a la pÔgina de inicio de sesión de Salesforce. Después de un inicio de sesión satisfactorio, se solicita al usuario que apruebe el acceso de la aplicación a los datos del estado del pedido.
- DespuĆ©s de que el usuario apruebe que la aplicación Estado de pedido acceda a los datos, Salesforce envĆa una devolución de llamada a la aplicación Estado de pedido con un código de autorización.
- La aplicación Estado de pedido pasa el código de autorización al extremo de tokens de Salesforce, solicitando un token de acceso.
- Salesforce valida el código de autorización y envĆa de vuelta un token de acceso que incluye permisos asociados en la forma de Ć”mbitos.
- La aplicación Estado de pedido envĆa una solicitud de vuelta a Salesforce para acceder a los datos de estado del pedido. La solicitud incluye el token de acceso con los Ć”mbitos asociados.
- Salesforce valida el token de acceso y los Ɣmbitos asociados.
- La aplicación Estado de pedido puede acceder a los datos protegidos, y el estado del pedido del cliente se muestra en la aplicación.
Nota Si el token de acceso deja de ser vÔlido, la aplicación cliente externa puede utilizar un token de actualización para obtener un nuevo token de acceso.
Echemos un vistazo con detalle a cada paso de este flujo de autorización.
- Solicitar un código de autorización
- El usuario autentica y autoriza el acceso
- Salesforce otorga el código de autorización
- Solicitar un token de acceso
- Salesforce otorga un token de acceso
Solicitar un código de autorización
Para iniciar el flujo de servidor web de OAuth 2.0, el servicio web externo (a través de la aplicación cliente externa) publica una solicitud de código de autorización utilizando el tipo de otorgamiento de código de autorización en el extremo de autorización de Salesforce. Con un código de autorización, la aplicación cliente externa puede probar que se autorizó como visitante seguro del sitio y que tiene permiso para solicitar un token de acceso.
El código de autorización se realiza en la forma de un redireccionamiento HTTP.
https://MyDomainName.my.salesforce.com/services/oauth2/authorize?
client_id=3MVG9IHf89I1t8hrvswazsWedXWY0i1qK20PSFaInvUgLFB6vrcb9bbWFTSIHpO8G2jxBLJA6uZGyPFC5Aejq&
redirect_uri=https://www.mycustomerorderstatus.com/oauth2/callback&
response_type=codeIncluya estos parÔmetros en la solicitud del código de autorización.
| ParÔmetro | Descripción |
|---|---|
Request Header
|
El extremo de autorizaciones de OAuth 2.0 de Salesforce. Las aplicaciones cliente externas envĆan solicitudes de autorización de OAuth a este extremo. |
client_id
|
La clave de consumidor de la aplicación cliente externa. Para acceder a la clave de consumidor, desde el Gestor de aplicaciones, busque la aplicación cliente externa y seleccione Ver desde el menú desplegable. A continuación haga clic en Gestionar detalles de consumidor. A veces se le solicita verificar su identidad antes de poder ver la clave de consumidor. |
redirect_uri
|
La URL donde se redirige a los usuarios después de una autenticación satisfactoria. El URI de redireccionamiento debe coincidir con uno de los valores en el campo URL de devolución de llamada de la aplicación cliente externa. De lo contrario, la aprobación falla. Puede encontrar el URI de redireccionamiento en la pÔgina Configuración de OAuth de la aplicación cliente externa. Este valor debe tener codificación de URL. |
response_type
|
El tipo de otorgamiento de OAuth 2.0 que solicita la aplicación cliente externa. El valor de este flujo debe ser code para indicar que la aplicación cliente externa estÔ solicitando un código de autorización. |
También puede incluir estos parÔmetros en la solicitud del código de autorización.
| ParÔmetro | Descripción |
|---|---|
scope
|
Permisos que definen el tipo de recursos protegidos a los que puede acceder una aplicación cliente externa. Asigna Ômbitos a una aplicación cliente externa cuando la crea y se incluyen con los tokens de OAuth durante el flujo de autorización. Si no incluye este parÔmetro, se solicitan todos los Ômbitos asignados a la aplicación cliente externa. Los Ômbitos que se hayan pasado en este parÔmetro deben ser un subconjunto de los Ômbitos registrados. Para parÔmetros vÔlidos, consulte Tokens y Ômbitos de OAuth. |
sso_provider
|
El nombre del desarrollador de un proveedor de identidad de inicio de sesión único (SSO) configurado con una URL de inicio de sesión de Mi dominio o una URL de sitio de Experience Cloud. Puede utilizar este parÔmetro para crear una experiencia de SSO que hace parecer que su aplicación estÔ integrada con el proveedor de SSO. Por ejemplo, puede utilizar este parÔmetro para ofrecer SSO en una implementación de Identidad desatendida. Para obtener mÔs información, consulte Crear una experiencia de inicio de sesión único nativa en su aplicación. |
state
|
Cualquier estado que solicite el servicio web externo a la URL de devolución de llamadas. Este valor debe tener codificación de URL. |
immediate
|
Un valor booleano que determina si se solicita al usuario el inicio de sesión y la aprobación. El valor predeterminado es
La opción |
code_challenge
|
Especifica el valor de hash SHA256 del valor de Este parƔmetro es obligatorio si se especifica un
|
display
|
Cambia el tipo de visualización de las pÔginas de inicio de sesión y autorización. Salesforce admite estos valores:
|
login_hint
|
Proporciona un valor de nombre de usuario vÔlido para rellenar previamente la pÔgina de inicio de sesión con el nombre de usuario, como Para pasar el parÔmetro |
nonce
|
UtilĆcelo con el Ć”mbito openid para solicitar un token de Id. de usuario. El token de Id. de usuario se devuelve en la respuesta. Este parĆ”metro es opcional, pero ayuda a detectar ataques de repetición.
|
prompt
|
Especifica cómo el servidor de autorización solicita al usuario una reaprobación y reautenticación. Salesforce admite estos valores:
Puede pasar valores de |
Encabezado de Uvid-Hint |
Opcionalmente, para conectar este flujo al flujo de invitados desatendido, puede incluir un encabezado de Si implementa el flujo de usuarios invitados en su aplicación, puede opcionalmente utilizar este encabezado para pasar en un token de acceso basado en Token web de JSON (JWT) que contenga un Id. de visitante exclusivo (UVID) vinculado a la identidad de un usuario invitado. Al pasar el UVID a un flujo de usuario nombrado, puede llevar información contextual desde una sesión de usuario invitado, como las preferencias de cookies del usuario, a una sesión de usuario nombrada. |
ParƔmetro de cuerpo de uvid_hint |
Un valor de En vez de pasar el UVID en el cuerpo de la solicitud, tambiƩn puede pasarlo en un token basado en JWT con un UVID a travƩs del encabezado del |
El usuario autentica y autoriza el acceso
Antes de que Salesforce proporcione códigos de autorización a aplicaciones cliente externas, se solicita a los usuarios de autenticación iniciar sesión en Salesforce.
Tras un inicio de sesión satisfactorio, Salesforce redirige a los usuarios a la pÔgina de aprobación para otorgar acceso a la aplicación.
Si los usuarios ya aprobaron el acceso, no es necesario volver a aprobar el acceso de nuevo.
Salesforce otorga el código de autorización
Después de que los usuarios aprueben el acceso a una aplicación cliente externa, Salesforce redirige a los usuarios a la URL de devolución de llamada, donde pueden ver la devolución de llamada con un código de autorización.
https://www.mycustomerorderstatus.com/oauth2/callback?
code=aPrx4sgoM2Nd1zWeFVlOWveD0HhYmiDiLmlLnXEBgX01tpVOQMWVSUuafFPHu3kCSjzk4CUTZg==- La primera parte de la devolución de llamada es la URL de devolución de llamada de la aplicación cliente externa:
https://www.mycustomerorderstatus.com/oauth2/callback. - La segunda parte es el código de autorización que la aplicación cliente externa utiliza para obtener un token de acceso:
code=aPrx4sgoM2Nd1zWeFVlOWveD0HhYmiDiLmlLnXEBgX01tpVOQMWVSUuafFPHu3kCSjzk4CUTZg==. El código de autorización caduca después de 15 minutos.
Si el parÔmetro state estÔ incluido en la cadena de consulta original, el estado especificado se pasa al paso de aprobación.
Solicitar un token de acceso
Para solicitar un token de acceso, la aplicación cliente externa pasa el código de autorización al extremo del token de Salesforce como un POST HTTP.
POST /services/oauth2/token HTTP/1.1
Host: mycompany.my.salesforce.com
Content-length: 307
Content-type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=aPrxhgZ2MIpkSy0aOdn07LjKFvsFOis6RGcWXz7p8JQCjcqfed5NQLe7sxWwMY_JQFuLwHRaRA==&
client_id=3MVG9IHf89I1t8hrvswazsWedXWY0iqK20PSFaInvUgLFB6vrcb9bbWFTSIHpO8G2jxBLJA6uZGyPFC5Aejq&
client_secret=*******************&
redirect_uri=https://www.mycustomerorderstatus.com/oauth2/callback
POST en el ejemplo contiene estos parƔmetros.
| ParÔmetro | Descripción |
|---|---|
Request Header
|
El encabezado de la solicitud puede contener estos parƔmetros.
El encabezado de la solicitud tambiƩn admite estos parƔmetros.
El parƔmetro |
grant_type
|
El tipo de validación que la aplicación cliente externa puede proporcionar para probar que es un visitante seguro. Para el flujo de servidor web, el valor debe ser authorization_code. |
code
|
Un código de autorización temporal recibido del servidor de autorización. La aplicación cliente externa utiliza este código a cambio de un token de acceso. Este tipo de flujo de OAuth 2.0 es una forma segura de pasar el token de acceso de vuelta a la aplicación. |
client_id
|
La clave de consumidor de la aplicación cliente externa. Para acceder a la clave de consumidor, desde el Gestor de aplicaciones, busque la aplicación cliente externa y seleccione Ver desde el menú desplegable. A continuación haga clic en Gestionar detalles de consumidor. A veces se le solicita verificar su identidad antes de poder ver la clave de consumidor. |
client_secret
|
El secreto de consumidor de la aplicación cliente externa. Para acceder al secreto de consumidor, desde el Gestor de aplicaciones, busque la aplicación cliente externa y seleccione Ver desde el menú desplegable. A continuación haga clic en Gestionar detalles de consumidor. A veces se le solicita verificar su identidad antes de poder ver el secreto de consumidor. Este parÔmetro es obligatorio a menos que la aplicación cliente externa no tenga activado Requerir secreto para flujo de servidor web. Si no se requiere un |
redirect_uri
|
La URL donde se redirige a los usuarios después de una autenticación satisfactoria. El URI de redireccionamiento debe coincidir con uno de los valores en el campo URL de devolución de llamada de la aplicación cliente externa. De lo contrario, la aprobación falla. Puede encontrar el URI de redireccionamiento en la pÔgina Configuración de OAuth de la aplicación cliente externa o desde la definición de la aplicación cliente externa. Este valor debe tener codificación de URL. |
TambiƩn puede incluir estos parƔmetros.
| ParÔmetro | Descripción |
|---|---|
client_assertion
|
En vez de pasar una client_secret, puede proporcionar una client_assertion y una client_assertion_type. Si no se proporciona un parƔmetro client_secret, Salesforce comprueba si hay client_assertion y client_assertion_type. Consulte Utilizar client_assertion en vez de client_secret. |
client_assertion_type
|
Proporcione este valor cuando utilice el parƔmetro El valor de |
code_verifier
|
Se requiere Ćŗnicamente si se va a especificar un parĆ”metro code_challenge se especificó en la solicitud de autorización. Especifica 128 bytes de datos aleatorios con alta entropĆa para dificultar la adivinanza del valor de
|
format
|
Si no se incluye en el encabezado de la solicitud, puede especificar el formato de devolución esperado. El parÔmetro
|
client_assertion en vez de client_secret.Si proporciona un client_assertion en vez de un client_secret, el valor de client_assertion debe incluir estos parƔmetros.
iss: Elclient_idde la definición de la aplicación cliente externa.sub: Elclient_idde la definición de la aplicación cliente externa.aud: La URL del servlet de token: http://nombrehost/services/oauth2/token.exp: Tiempo de caducidad de la afirmación en 5 minutos, expresado como el número de segundos desde 1970-01-01T0:0:0Z medido en UTC.
El client_assertion también debe firmarse con la clave privada asociada con el certificado cargado del consumidor de OAuth. Solo se admite el algoritmo RS256. Para el método de autenticación de cliente de private_key_jwt, consulte las especificaciones de OpenID Connect.
En lugar de enviar credenciales de cliente como parÔmetros en el cuerpo de la operación POST, Salesforce admite el esquema de autenticación HTTP bÔsica. El formato de este esquema requiere los client_id y client_secret en el encabezado de autorización de la publicación de la siguiente manera:
Authorization: Basic64Encode(client_id:secret)
El client_id y el client_secret estÔn separados por un punto (:). Para obtener mÔs información consulte el documento Marco de autorización OAuth 2.0.
Este ejemplo muestra una solicitud POST de token de acceso que utiliza el esquema de autenticación HTTP bÔsica en lugar de enviar credenciales de cliente en el cuerpo de la solicitud POST.
POST /services/oauth2/token HTTP/1.1
Host: mycompany.my.salesforce.com
Authorization: Basic client_id=3MVG9IHf89I1t8hrvswazsWedXWY0iqK20PSFaInvUgLFB6vrcb9bbWFTSIHpO8G2jxBLJA6uZGyPFC5Aejq&
client_secret=*******************&
grant_type=authorization_code&code=aPrxsmIEeqM9PiQroGEWx1UiMQd95_5JUZ
VEhsOFhS8EVvbfYBBJli2W5fn3zbo.8hojaNW_1g%3D%3D&
redirect_uri=https%3A%2F%2Fwww.mysite.com%2Fcode_callback.jspclient_id y client_secret se envĆan en el cuerpo de POST, se ignora el encabezado de autorización.Salesforce otorga un token de acceso
Después de que Salesforce valide las credenciales de la aplicación cliente externa, devuelve una respuesta con el token de acceso. En este ejemplo, la respuesta estÔ en un formato JSON.
{
"access_token": "00DB0000000TfcR!AQQAQFhoK8vTMg_rKA.esrJ2bCs.OOIjJgl.9Cx6O7KqjZmHMLOyVb.U61BU9tm4xRusf7d3fD1P9oefzqS6i9sJMPWj48IK",
"signature": "d/SxeYBxH0GSVko0HMgcUxuZy0PA2cDDz1u7g7JtDHw=",
"scope": "web openid",
"id_token": "eyJraWQiOiIyMjAiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdF9oYXNoIjoiSVBRNkJOTjlvUnUyazdaYnYwbkZrUSIsInN1YiI6Imh0dHBzOi8vbG9...",
"instance_url": "https://mycompany.my.salesforce.com",
"id": "https://login.salesforce.com/id/00DB0000000TfcRMAS/005B0000005Bk90IAC",
"token_type": "Bearer",
"issued_at": "1558553873237"
}
La respuesta incluye estos parƔmetros:
| ParÔmetro | Descripción |
|---|---|
access_token
|
Token de OAuth que una aplicación cliente externa utiliza para solicitar 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. |
signature
|
Firma HMAC-SHA256 con codificación base64 firmada con el client_secret. La firma puede incluir el Id. y el issued_at value concatenados, que puede utilizar para verificar que la URL de identidad no cambió desde que el servidor la envió. |
scope
|
Los Ômbitos asociados con el token de acceso. Los Ômbitos definen mÔs el tipo de recursos protegidos a los que el cliente puede acceder. Asigna Ômbitos a una aplicación cliente externa cuando la crea y se incluyen con los tokens de OAuth durante el flujo de autorización. Para parÔmetros vÔlidos, consulte Tokens y Ômbitos de OAuth. |
id_token
|
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 del cliente solicitante. Consulte Especificaciones de OpenID Connect. Este parÔmetro se devuelve si el parÔmetro scope incluye |
instance_url
|
Una URL que indica la instancia de la organización del usuario. Por ejemplo: https://yourInstance.salesforce.com/.
|
id
|
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. |
token_type
|
Un tipo de token de Bearer, que se utiliza para todas las respuestas que incluyen un token de acceso.
|
issued_at
|
Marca de tiempo del momento de creación de la firma en milisegundos. |
La respuesta tambiƩn puede contener estos parƔmetros.

