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 del Servicio de asistencia a ver el estado de pedidos 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 del 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 concesión 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. Usted 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 Este parƔmetro es necesario si se especifica un verificador
|
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, por ejemplo, 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 los valores |
Encabezado Uvid-Hint |
Opcionalmente, para conectar este flujo al flujo de invitados desatendido, puede incluir un encabezado 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 uvid_hint |
Un valor En lugar de pasar el identificador UVID en el cuerpo de la solicitud, tambiƩn puede lo pasar en un token basado en JWT con un UVID a travƩs del encabezado |
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 autenticadores 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 consola original, el estado especificado se pasa en el 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
|
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 del 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 client_secret, puede proporcionar client_assertion y 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
|
Solo es necesario si se especificó un parĆ”metro code_challenge en la solicitud de autorización. Especifica 128 bytes de datos aleatorios con alta entropĆa para hacer que sea difĆcil adivinar el 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 client_assertion en vez de 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: el plazo de vencimiento de la afirmación, en 5 minutos, expresado como el número de segundos desde 1970-01-01T0:0:0Z según la zona horaria UTC.
La client_assertion también debe estar firmada 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 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. Este formato de esquema requiere client_id y client_secret en el encabezado de autorización de la publicación de la siguiente forma:
Authorization: Basic64Encode(client_id:secret)
client_id y client_secret se separan con 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 client_secret. La firma puede incluir el Id. concatenado y issued_at value, que puede utilizar para verificar que la dirección URL de identidad no ha cambiado desde que la envió el servidor. |
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. Usted 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. 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 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.

