Extensión de clave de prueba para Code Exchange (PKCE)
Para mejorar la seguridad de sus implementaciones de proveedor de autenticación y OAuth, utilice la clave de prueba de OAuth 2.0 para el intercambio de códigos (PKCE). Puede requerir PKCE a nivel de toda la organización, requerirlo para una aplicación conectada específica y activarlo automáticamente para proveedores de autenticación compatibles.
Ediciones necesarias
| Disponible en: todas las ediciones |
Durante el flujo de código de autorización de OAuth y sus derivativas, la extensión PKCE ayuda a garantizar que el cliente que inicia el flujo es el mismo cliente que completa el flujo. Durante estos flujos, una aplicación solicita un código de autorización de Salesforce, que luego intercambia un token de acceso. De manera tradicional, la aplicación puede proteger la solicitud de token incluyendo su secreto de consumidor de aplicación conectada. Como el secreto de consumidor es información que solo conoce la aplicación y Salesforce, funciona como una contraseña para acceder al extremo de tokens de Salesforce. Incluso si un atacante obtiene acceso a un código de autorización, no puede utilizarlo para obtener un token de acceso a menos que tenga el secreto de consumidor.
Pero los clientes públicos como aplicaciones móviles y aplicaciones de una sola página no pueden mantener el secreto de consumidor confidencial. A diferencia de las aplicaciones cliente privadas con una arquitectura tradicional de servidores, los clientes públicos no tienen un backend privado donde pueden almacenar el secreto de consumidor. Si un cliente público envía el secreto de consumidor en la solicitud de token, se arriesga a ocultarlo. Por este motivo, nunca recomendamos incluir el secreto de consumidor en solicitudes de token para un cliente público.
Sin secreto de consumidor, la aplicación es vulnerable a un atacante que intercepte el código de autorización e intenta intercambiarlo por un token de acceso. PKCE ayuda a rellenar la brecha de secreto de consumidor con un conjunto de parámetros de hash que solo su aplicación y Salesforce pueden comprender. Durante un flujo que implementa PKCE, la aplicación crea una cadena aleatoria, conocida como el parámetro code_verifier. A continuación, muestra un hash de este valor con un algoritmo SHA-256. Este valor de hash es el parámetro code_challenge. Un concepto clave de hash SHA-256 es que solo funciona en una dirección. Puede obtener code_challenge de code_verifier ejecutando el algoritmo SHA-256. Pero no puede ejecutarlo al revés para obtener code_verifier de code_challenge.
El concepto de una función unidireccional desempeña una función importante en el motivo por el que funciona PKCE. Cuando la aplicación envía su solicitud inicial de un código de autorización, incluye el parámetro code_challenge con hash. Luego, cuando solicita un token de acceso, incluye el parámetro code_verifier. Ahora, Salesforce tiene ambos parámetros y puede ejecutar el algoritmo SHA-256 sobre el valor code_verifier para compararlo con code_challenge. Si los valores coinciden, Salesforce puede verificar que la misma aplicación envió la solicitud de autorización y la solicitud de token. Incluso si un atacante tiene el código de autorización, no puede intercambiarlo por un token de acceso porque no tiene los parámetros de PKCE que solo su aplicación y Salesforce saben.
Le recomendamos que implemente siempre PKCE para clientes públicos. Para clientes privados, recomendamos que implemente PKCE e incluya el secreto de consumidor en las solicitudes de tokens.
Opcionalmente, puede implementar PKCE incluyendo los parámetros code_challenge y code_verifier al construir variaciones del flujo de código de autorización con Salesforce. Estos flujos admiten PKCE.
- Flujo de servidor Web
- Flujo de servidor web híbrido
- Todas las variaciones del flujo Código de autorización y credenciales, incluyendo el registro desatendido, inicio de sesión sin contraseña desatendido y flujos de invitados desatendidos. Consulte Flujos de identidad desatendida.
Para asegurarse de que se aplica PKCE, recomendamos que realice estas mediciones de seguridad.
- Requerir PKCE a nivel de toda la organización desde la página de configuración de OAuth y OpenID Connect. Con este parámetro activado, todas las variaciones de flujo de código de autorización que no utilizan PKCE se bloquean automáticamente.
- Requerir PKCE para aplicaciones conectadas específicas. Como desarrollador de aplicaciones conectadas, si activa este parámetro, debe implementar PKCE cuando construya flujos de autorización con esta aplicación.
- Utilice PKCE para un proveedor de autenticación. Para los proveedores de autenticación admitidos, puede utilizar PKCE automáticamente seleccionando una configuración única. Estos proveedores de autenticación admiten PKCE.
Generar parámetros de PKCE
Utilice el extremo Generador de PKCE para generar rápidamente los parámetros code_challenge y code_verifier que puede implementar en las variaciones del flujo de código de autorización.
- Active Uso compartido de recursos de origen cruzado (CORS) para extremos de OAuth, que activa automáticamente CORS para el extremo
/services/oauth2/pkce/generator. - Para generar los parámetros
code_challengeycode_verifier, envíe una solicitud GET HTTP al extremo/services/oauth2/pkce/generatoren la URL de inicio de sesión de Mi dominio o la URL de sitio de Experience Cloud. No incluya encabezados ni parámetros de cuerpo en esta solicitud.A continuación se incluye un ejemplo de solicitud que utiliza una URL de inicio de sesión de Mi dominio.GET /services/oauth2/pkce/generator? HTTP 1.1 Host: MyDomainName.my.site.salesforce.comA continuación se incluye un ejemplo de solicitud para un sitio de Experience Cloud.GET /services/oauth2/pkce/generator? HTTP 1.1 Host: MyDomainName.my.site.comSalesforce responde con estos parámetros de PKCE.
A continuación se incluye un ejemplo de respuesta.Parámetro Descripción code_challenge_methodEl método utilizado para calcular code_challengea partir decode_verifier. Salesforce utiliza el métodoS256, que calculacode_challengea partir decode_verifierutilizando un algoritmo SHA256. Para obtener más información, consulte Sección 4.2 en RFC 7636: Clave de prueba para el intercambio de códigos por clientes públicos de OAuth.code_challengeEspecifica el valor de hash SHA256 del valor
code_verifieren la solicitud de token. El valor es Base-64 URL codificado como se define en Sección 5 de RFC 4648: Codificaciones de datos Base16, Base32 y Base64.Cuando configure su flujo de autorización, incluya este valor en la solicitud de autorización.
code_verifierEspecifica 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 es Base-64 URL codificado como se define en Sección 5 de RFC 4648: Codificaciones de datos Base16, Base32 y Base64.
Cuando configure su flujo de autorización, incluya este valor en la solicitud de token.
{ “code_challenge_method”:“S256” “code_challenge”:“JB7nT*************” “code_verifier”:“GkLvw**************” }
Al configurar el flujo de servidor web, el flujo de servidor web híbrido y las variaciones del flujo Código autorización y credenciales, incluya los parámetros code_challenge y code_verifier en sus solicitudes como se indica.
