Utilisation de PKCE pour octroyer des codes d'autorisation aux groupes d'utilisateurs Amazon Cognito - 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 pour octroyer des codes d'autorisation aux groupes d'utilisateurs Amazon Cognito

Amazon Cognito prend en charge l'authentification par clé de preuve pour l'échange de code (PKCE) lors de l'octroi de codes d'autorisation. PKCE est une extension de l'octroi de code d'autorisation OAuth 2.0 pour les clients publics. Le PKCE protège contre le rachat 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 demandant l'autorisation initiale au client échangeant le code d'autorisation contre des jetons.

Votre application doit appliquer un hachage SHA256 à la chaîne du vérificateur de code et encoder le résultat en base64. Passez la chaîne hachée en Point de terminaison d’autorisation tant que code_challenge paramètre dans le corps de la demande. 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 hash-and-encode opération sur le vérificateur de code. Amazon Cognito renvoie uniquement les jetons d'identification, d'accès et d'actualisation s'il détermine que le vérificateur de code génère le même défi de code que celui qu'il a reçu dans 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 l'interface utilisateur hébergée pendant l'assistant.

    1. Si vous créez un nouveau groupe d'utilisateurs, configurez un client d'application et configurez l'interface utilisateur hébergé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 soumettrez dans votre demande auPoint de terminaison de jeton.

  5. Hachez la code_verifier chaîne avec l'algorithme SHA256. Codez le résultat de l'opération de hachage en base64. Cette chaîne est la valeur du code_challenge paramètre que vous soumettrez 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 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}")

    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 complète à l'interface utilisateur hébergée avec une demande d'octroi de code d'autorisation auprès de PKCE. Voici un exemple d'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. 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.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, consultez. Utilisation des jetons avec des groupes d'utilisateurs