Uso de la PKCE en las concesiones de códigos de autorización - Amazon Cognito

Uso de la PKCE en las concesiones de códigos de autorización

Amazon Cognito admite la autenticación con clave de prueba para el intercambio de códigos (PKCE) en las concesiones de códigos de autorización. La PKCE es una extensión de la concesión de códigos de autorización de OAuth 2.0 para clientes públicos. Este tipo de autenticación evita que se canjeen códigos de autorización interceptados.

Cómo utiliza Amazon Cognito la PKCE

Para iniciar la autenticación con la PKCE, la aplicación debe generar un valor de cadena único. Esta cadena es el verificador de código, un valor secreto que Amazon Cognito utiliza para comparar el cliente que solicita la concesión de autorización inicial con el cliente que intercambia el código de autorización por tokens.

La aplicación debe aplicar un hash SHA256 a la cadena del verificador de código y codificar el resultado en base64. Pase la cadena hash al Autorizar punto de conexión como parámetro code_challenge en el cuerpo de la solicitud. Cuando la aplicación intercambie el código de autorización por tokens, debe incluir la cadena verificadora de código en texto simple como parámetro code_verifier en el cuerpo de la solicitud al Punto de conexión de token. Amazon Cognito realiza la misma operación de hash y codificación en el verificador de código. Amazon Cognito solo devuelve los tokens de ID, acceso y actualización si concluye que el verificador de código genera el mismo desafío de código que ha recibido en la solicitud de autorización.

Implementación del flujo de concesión de autorizaciones con la PKCE
  1. Abra la consola de Amazon Cognito. Si se le solicita, escriba sus credenciales de AWS.

  2. Elija User Pools (Grupos de usuarios).

  3. Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios. Si crea un grupo de usuarios, se le pedirá, durante la ejecución del asistente, que configure un cliente de aplicación y la interfaz de usuario alojada.

    1. Si crea un grupo de usuarios nuevo, configure un cliente de aplicación y la interfaz de usuario alojada durante la configuración guiada.

    2. Si configura un grupo de usuarios ya existente, añada un dominio y un cliente de aplicación público, si aún no lo ha hecho.

  4. Genere una cadena alfanumérica aleatoria, normalmente un identificador único universal (UUID), para crear un desafío de código para la PKCE. Esta cadena es el valor del parámetro code_verifier que enviará en la solicitud al Punto de conexión de token.

  5. Aplique la función hash a la cadena code_verifier con el algoritmo SHA256. Codifique el resultado de la operación de hash en base64. Esta cadena es el valor del parámetro code_challenge que enviará en la solicitud al Autorizar punto de conexión.

    El siguiente ejemplo de Python genera un code_verifier y calcula el code_challenge:

    #!/usr/bin/env python3 import random from base64 import urlsafe_b64encode from hashlib import sha256 from string import ascii_letters from string import digits # use a cryptographically strong random number generator source rand = random.SystemRandom() code_verifier = ''.join(rand.choices(ascii_letters + digits, k=128)) code_verifier_hash = sha256(code_verifier.encode()).digest() code_challenge = urlsafe_b64encode(code_verifier_hash).decode().rstrip('=') print(f"code challenge: {code_challenge}") print(f"code verifier: {code_verifier}")

    A continuación se muestra un ejemplo de salida de script de Python:

    code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
  6. Complete el inicio de sesión en la interfaz de usuario alojada con una solicitud de concesión de código de autorización con la PKCE. A continuación se muestra un ejemplo de URL:

    https://mydomain.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&code_challenge=Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg&code_challenge_method=S256
  7. Obtenga la autorización code y canjéela por tokens con el punto de conexión del token. A continuación, se muestra un ejemplo de solicitud:

    POST /oauth2/token HTTP/1.1 Host: mydomain.us-east-1.amazoncognito.com Content-Type: application/x-www-form-urlencoded Content-Length: 296 redirect_uri=https%3A%2F%2Fwww.example.com& client_id=1example23456789& code=7378f445-c87f-400c-855e-0297d072ff03& grant_type=authorization_code& code_verifier=9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
  8. Revise la respuesta. Contendrá tokens de ID, acceso y actualización. Para obtener más información sobre el uso de tokens de grupos de usuarios de Amazon Cognito, consulte Descripción de los tokens web JSON (JWT) de los grupos de usuarios.