View a markdown version of this page

Utilisation de PKCE dans l'attribution de codes d'autorisation - Amazon Cognito

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de PKCE dans l'attribution de codes d'autorisation

Amazon Cognito prend en charge l'authentification PKCE (Proof Key for Code Exchange) lors de l'attribution des codes d'autorisation. PKCE est une extension du code d'autorisation OAuth 2.0 accordé aux clients publics. PKCE protège contre l'utilisation de codes d'autorisation interceptés.

Comment Amazon Cognito utilise PKCE

Pour démarrer l'authentification avec PKCE, votre application doit générer une valeur de chaîne unique. Cette chaîne est le vérificateur de code, une valeur secrète qu'Amazon Cognito utilise pour comparer le client qui demande l'autorisation initiale au client qui échange le code d'autorisation contre les jetons.

Votre application doit appliquer un hachage SHA256 à la chaîne du vérificateur de code et encoder le résultat en base64. Transmettez la chaîne hachée en Point de terminaison d’autorisation tant que code_challenge paramètre dans le corps de la requête. Lorsque votre application échange le code d'autorisation contre des jetons, elle doit inclure la chaîne du vérificateur de code en texte brut en tant que code_verifier paramètre dans le corps de la demande au. Point de terminaison de jeton Amazon Cognito effectue la même opération de hachage et d'encodage sur le vérificateur de code. Amazon Cognito ne renvoie des jetons d'identification, d'accès et d'actualisation que s'il détermine que le vérificateur de code entraîne le même défi de code que celui reçu lors de la demande d'autorisation.

Pour implémenter le flux d'octroi d'autorisations avec PKCE
  1. Ouvrez la console Amazon Cognito. Si vous y êtes invité, entrez vos AWS informations d'identification.

  2. Choisissez Groupes d’utilisateurs.

  3. Choisissez un groupe d’utilisateurs existant dans la liste ou créez-en un. Si vous créez un groupe d'utilisateurs, vous serez invité à configurer un client d'application et à configurer la connexion gérée pendant l'assistant.

    1. Si vous créez un nouveau groupe d'utilisateurs, configurez un client d'application et configurez la connexion gérée lors de la configuration guidée.

    2. Si vous configurez un groupe d'utilisateurs existant, ajoutez un domaine et un client d'application public, si ce n'est pas déjà fait.

  4. Générez une chaîne alphanumérique aléatoire, généralement un identifiant unique universel (UUID), afin de créer un défi de code pour le PKCE. Cette chaîne est la valeur du code_verifier paramètre que vous allez soumettre dans votre demande auPoint de terminaison de jeton.

  5. Hachez la code_verifier chaîne à l'aide de l'algorithme SHA256. Encodez le résultat de l'opération de hachage en base64. Cette chaîne est la valeur du code_challenge paramètre que vous allez soumettre dans votre demande auPoint de terminaison d’autorisation.

    L'Pythonexemple suivant génère un code_verifier et calcule le code_challenge :

    #!/usr/bin/env python3 import secrets from base64 import urlsafe_b64encode from hashlib import sha256 from string import ascii_letters from string import digits # use the secrets module for cryptographically strong random values alphabet = ascii_letters + digits code_verifier = ''.join(secrets.choice(alphabet) for _ in range(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}")

    Voici un exemple de sortie du Python script :

    code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
  6. Connexion gérée complète à l'aide d'une demande d'octroi de code d'autorisation auprès de PKCE. Voici un exemple d'URL :

    https://mydomain.auth.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. Collectez l'autorisation code et échangez-la contre des jetons avec le point de terminaison du jeton. Voici un exemple de demande :

    POST /oauth2/token HTTP/1.1 Host: mydomain.auth.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. Passez en revue la réponse. Il contiendra des jetons d'identification, d'accès et d'actualisation. Pour plus d'informations sur l'utilisation des jetons du pool d'utilisateurs Amazon Cognito, consultezComprendre les jetons Web JSON (JWT) du pool d'utilisateurs.