Loading
Identificar sus usuarios y gestionar el acceso
Extensión de clave de prueba para Code Exchange (PKCE)

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.

Para asegurarse de que se aplica PKCE, recomendamos que realice estas mediciones de seguridad.

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.

  1. 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.
  2. Para generar los parámetros code_challenge y code_verifier, envíe una solicitud GET HTTP al extremo /services/oauth2/pkce/generator en 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.com
    A 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.com
    Salesforce responde con estos parámetros de PKCE.
    ParámetroDescripción
    code_challenge_method El método utilizado para calcular code_challenge a partir de code_verifier. Salesforce utiliza el método S256, que calcula code_challenge a partir de code_verifier utilizando 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_challenge

    Especifica el valor de hash SHA256 del valor code_verifier en 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_verifier

    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 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.

    A continuación se incluye un ejemplo de respuesta.
    {
    “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.

 
Cargando
Salesforce Help | Article