

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
<a name="using-pkce-in-authorization-code"></a>

Amazon Cognito supporta l'autenticazione Proof Key for Code Exchange (PKCE) nelle concessioni 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
<a name="how-pkce-works"></a>

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 di autorizzazione iniziale con il client che scambia il codice di autorizzazione in token. 

L'app deve applicare un SHA256 hash alla stringa del verificatore del codice e codificare il risultato in base64. Passa la stringa con hash a [Endpoint Authorize](authorization-endpoint.md) come parametro nel corpo della richiesta. `code_challenge` Quando l'app scambia il codice di autorizzazione in cambio di token, deve includere la stringa del verificatore del codice in testo semplice come `code_verifier` parametro nel corpo della richiesta a. [Endpoint Token](token-endpoint.md) Amazon Cognito esegue la stessa hash-and-encode operazione sul verificatore di codice. Amazon Cognito restituisce ID, accesso e token di aggiornamento solo se determina che il verificatore del codice genera la stessa richiesta di codice ricevuta nella richiesta di autorizzazione.

**Per implementare Authorization Grant Flow con PKCE**

1. Apri la [console Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se richiesto, inserisci le tue AWS credenziali.

1. Scegli **User Pools** (Pool di utenti).

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

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

   1. Se configuri un pool di utenti esistente, aggiungi un [dominio](cognito-user-pools-assign-domain.md) e un [client di app pubblico](user-pool-settings-client-apps.md), se non l'hai già fatto.

1. Genera una stringa alfanumerica casuale, in genere un identificatore univoco universale ([UUID](cognito-terms.md#terms-uuid)), per creare una sfida di codice per il PKCE. Questa stringa è il valore del `code_verifier` parametro che verrà inviato nella richiesta a. [Endpoint Token](token-endpoint.md) 

1. Effettua l'hash della `code_verifier` stringa con l' SHA256 algoritmo. Codifica il risultato dell'operazione di hashing in base64. Questa stringa è il valore del `code_challenge` parametro che verrà inviato nella richiesta a. [Endpoint Authorize](authorization-endpoint.md) 

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

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

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

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

1. Rivedi la risposta. Conterrà ID, accesso e token di aggiornamento. Per ulteriori informazioni sull'utilizzo dei token del pool di utenti di Amazon Cognito, consulta. [Comprensione dei token web JSON del pool di utenti () JWTs](amazon-cognito-user-pools-using-tokens-with-identity-providers.md)