View a markdown version of this page

Utilizzo di PKCE nelle concessioni di codici di autorizzazione - Amazon Cognito

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di PKCE nelle concessioni di codici di autorizzazione

Amazon Cognito supporta l'autenticazione Proof Key for Code Exchange (PKCE) nella concessione di codici di autorizzazione. PKCE è un'estensione della concessione del codice di autorizzazione OAuth 2.0 per i clienti pubblici. PKCE protegge dal riscatto dei codici di autorizzazione intercettati.

In che modo Amazon Cognito utilizza PKCE

Per avviare l'autenticazione con PKCE, l'applicazione deve generare un valore di stringa univoco. Questa stringa è il verificatore del codice, un valore segreto che Amazon Cognito utilizza per confrontare il client che richiede la concessione dell'autorizzazione iniziale con il client che scambia il codice di autorizzazione con i token.

L'app deve applicare un hash SHA256 alla stringa di verifica del codice e codificare il risultato in base64. Passa la stringa con hash a as come parametro nel corpo della richiestaEndpoint Authorize. code_challenge Quando l'app scambia il codice di autorizzazione con i token, deve includere la stringa di verifica del codice in chiaro come code_verifier parametro nel corpo della richiesta al. Endpoint Token Amazon Cognito esegue la stessa operazione di hash-and-encode sul verificatore del codice. Amazon Cognito restituisce ID, token di accesso e aggiornamento solo se determina che il verificatore di codice restituisce la stessa richiesta di codice ricevuta nella richiesta di autorizzazione.

Per implementare Authorization Grant Flow con PKCE
  1. Apri la console Amazon Cognito. Se richiesto, inserisci le tue AWS credenziali.

  2. Scegli User Pools (Pool di utenti).

  3. Scegli un bacino d'utenza esistente dall'elenco o creane uno nuovo. Se crei un pool di utenti, ti verrà richiesto di configurare un app client e configurare l'accesso gestito durante la procedura guidata.

    1. Se crei un nuovo pool di utenti, configura un app client e configura l'accesso gestito durante la configurazione guidata.

    2. Se configuri un pool di utenti esistente, aggiungi un dominio e un client di app pubblico, se non l'hai già fatto.

  4. Genera una stringa alfanumerica casuale, in genere un identificatore univoco universale (UUID), per creare una sfida di codice per il PKCE. Questa stringa è il valore del code_verifier parametro che invierai nella tua richiesta a. Endpoint Token

  5. Effettua l'code_verifierhashing della stringa con l'algoritmo SHA256. Codificate il risultato dell'operazione di hashing in base64. Questa stringa è il valore del code_challenge parametro che invierai nella tua richiesta a. Endpoint Authorize

    L'Pythonesempio seguente genera un code_verifier e calcola ilcode_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}")

    Di seguito è riportato un esempio di output dello Python script:

    code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
  6. Completa l'accesso gestito con una richiesta di concessione del codice di autorizzazione con PKCE. Di seguito è riportato un esempio di 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. Raccogli l'autorizzazione code e riscattala in token con l'endpoint del token. Di seguito è riportato un esempio di richiesta:

    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. Rivedi la risposta. Conterrà ID, token di accesso e aggiornamento. Per ulteriori informazioni sull'utilizzo dei token del pool di utenti di Amazon Cognito, consulta. Comprensione dei token web JSON (JWT) del pool di utenti