

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à.

# Comprensione dei token web JSON del pool di utenti () JWTs
<a name="amazon-cognito-user-pools-using-tokens-with-identity-providers"></a>

I token sono artefatti di autenticazione che le applicazioni possono utilizzare come prova dell'autenticazione OIDC e per richiedere l'accesso alle risorse. I token includono le *attestazioni* che sono informazioni sull'utente. Il token ID contiene le attestazioni relative all'identità, come il nome, il cognome e l'indirizzo e-mail dell'utente. Il token di accesso contiene affermazioni come quelle `scope` che l'utente autenticato può utilizzare per accedere alle operazioni API self-service degli utenti di Amazon Cognito di terze parti APIs e a. [Endpoint UserInfo](userinfo-endpoint.md) I token ID e di accesso includono entrambi un'attestazione `cognito:groups` che contiene l'appartenenza al gruppo dell'utente nel pool di utenti. Per ulteriori informazioni sui pool di utenti, consulta [Aggiunta di gruppi a un bacino d'utenza](cognito-user-pools-user-groups.md).

Amazon Cognito dispone anche di token di aggiornamento che puoi usare per ottenere nuovi token o revocare i token esistenti. [Aggiorna un token](amazon-cognito-user-pools-using-the-refresh-token.md) per recuperare nuovi ID e token di accesso. [Revoca un token](amazon-cognito-user-pools-using-the-refresh-token.md#amazon-cognito-identity-user-pools-revoking-all-tokens-for-user) per revocare l'accesso utente consentito dai token di aggiornamento.

Amazon Cognito emette token come stringhe con codifica [base64url](https://datatracker.ietf.org/doc/html/rfc4648#section-5). Puoi decodificare qualsiasi ID Amazon Cognito o token di accesso `base64url` da un codice JSON in testo semplice. I token di aggiornamento di Amazon Cognito sono crittografati, opachi agli utenti e agli amministratori dei pool di utenti e possono essere letti solo dal pool di utenti.

**Autenticazione con i token**  
Quando un utente accede alla tua applicazione, Amazon Cognito verifica le informazioni di accesso. Se l'accesso avviene correttamente, Amazon Cognito crea una sessione e restituisce un token ID, un token di accesso e un token di aggiornamento per l'utente autenticato. Puoi utilizzare i token per concedere ai tuoi utenti l'accesso a risorse downstream e APIs come Amazon API Gateway. Oppure, puoi scambiarli con credenziali AWS temporanee per accedere ad altri Servizi AWS.

![\[Panoramica sull'autenticazione\]](http://docs.aws.amazon.com/it_it/cognito/latest/developerguide/images/scenario-authentication-cup2.png)


**Archiviazione dei token**  
La tua app deve essere in grado di memorizzare token di varie dimensioni. La dimensione del token può cambiare per motivi tra cui, a titolo esemplificativo, altre attestazioni, modifiche negli algoritmi di codifica e modifiche negli algoritmi di crittografia. Quando abiliti la revoca dei token nel pool di utenti, Amazon Cognito aggiunge ulteriori richieste ai token web JSON, aumentandone le dimensioni. Le nuove attestazioni `origin_jti` e `jti` vengono aggiunte ai token di accesso e ID. Per ulteriori informazioni sulla revoca dei token, consulta [Revoca dei token](https://docs.aws.amazon.com/cognito/latest/developerguide/token-revocation.html).

**Importante**  
Come best practice, proteggere tutti i token durante il transito e lo storage nel contesto dell'applicazione. I token possono contenere informazioni identificative personali sugli utenti e informazioni sul modello di sicurezza utilizzato per bacino d'utenza.

**Personalizzazione dei token**  
Puoi personalizzare i token di accesso e ID trasferiti da Amazon Cognito alla tua app. In un [Trigger Lambda di pre-generazione del token](user-pool-lambda-pre-token-generation.md), puoi aggiungere, modificare e sopprimere le richieste relative ai token. Il trigger di pre-generazione di token è una funzione Lambda a cui Amazon Cognito invia un set predefinito di richieste. Le affermazioni includono ambiti OAuth 2.0, appartenenza a gruppi di utenti, attributi utente e altro. La funzione può quindi cogliere l'occasione per apportare modifiche al runtime e restituire richieste di token aggiornate ad Amazon Cognito.

Costi aggiuntivi vengono applicati alla personalizzazione dei token di accesso con gli eventi della versione 2. Per ulteriori informazioni, consultare [Prezzi di Amazon Cognito](https://aws.amazon.com/cognito/pricing/).

**Topics**
+ [Comprensione del token di identità (ID)](amazon-cognito-user-pools-using-the-id-token.md)
+ [Comprendere il token di accesso](amazon-cognito-user-pools-using-the-access-token.md)
+ [Aggiorna i token](amazon-cognito-user-pools-using-the-refresh-token.md)
+ [Fine delle sessioni utente con revoca del token](token-revocation.md)
+ [Verifica dei token web JSON](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md)
+ [Gestione della scadenza e della memorizzazione nella cache dei token del pool di utenti](amazon-cognito-user-pools-using-tokens-caching-tokens.md)

# Comprensione del token di identità (ID)
<a name="amazon-cognito-user-pools-using-the-id-token"></a>

Il token ID è un [token web JSON](https://tools.ietf.org/html/rfc7519) che contiene richieste relative all'identità dell'utente autenticato, ad esempio `name`, `email` e `phone_number`. Puoi utilizzare queste informazioni sull'identità all'interno dell'applicazione. Il token ID può essere utilizzato anche per autenticare utenti in relazione al server di risorse o alle applicazioni server. È inoltre possibile utilizzare un token ID al di fuori dell'applicazione con le operazioni dell'API Web. In questi casi, prima di poter considerare attendibile qualsiasi attestazione all'interno del token ID, devi verificare la firma del token ID. Consulta [Verifica dei token web JSON](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md). 

Puoi configurare il periodo di scadenza del token ID su qualsiasi valore compreso tra 5 minuti e 1 giorno. Puoi configurare questo valore per il client dell'app.

**Importante**  
Quando l'utente accede con accesso gestito, Amazon Cognito imposta cookie di sessione validi per 1 ora. Se utilizzi l'accesso gestito per l'autenticazione nella tua applicazione e specifichi una durata minima inferiore a 1 ora per i token di accesso e ID, i tuoi utenti avranno comunque una sessione valida fino alla scadenza del cookie. Se l'utente dispone di token che scadono durante la sessione di un'ora, può aggiornare i token senza dover eseguire nuovamente l'autenticazione.

## Intestazione del token ID
<a name="user-pool-id-token-header"></a>

L'intestazione contiene due informazioni: l'ID della chiave (`kid`) e l'algoritmo (`alg`).

```
{
"kid" : "1234example=",
"alg" : "RS256"
}
```

**`kid`**  
L'ID della chiave . Il valore indica quale chiave è utilizzata per proteggere la firma JWS (JSON Web Signature) del token. È possibile visualizzare la chiave di firma del pool di utenti sull' IDs `jwks_uri`endpoint.  
Per ulteriori informazioni sul `kid` parametro, consulta la sezione [parametro di intestazione dell'ID della chiave (kid)](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.5).

**`alg`**  
L'algoritmo di crittografia utilizzato da Amazon Cognito per proteggere il token di accesso. I pool di utenti utilizzano un algoritmo RS256 crittografico, che è una firma RSA con SHA-256.  
Per ulteriori informazioni sul `alg` parametro, consultare la sezione relativa al [parametro di intestazione dell'algoritmo (alg)](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.4).

## Payload predefinito del token ID
<a name="user-pool-id-token-payload"></a>

Questo è un esempio di payload derivante da un token ID. Contiene attestazioni relative all'utente autenticato. [Per ulteriori informazioni sulle attestazioni standard OpenID Connect (OIDC), consulta l'elenco delle attestazioni standard OIDC.](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims) Puoi aggiungere rivendicazioni di tua progettazione con un. [Trigger Lambda di pre-generazione del token](user-pool-lambda-pre-token-generation.md)

```
<header>.{
    "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "cognito:groups": [
        "test-group-a",
        "test-group-b",
        "test-group-c"
    ],
    "email_verified": true,
    "cognito:preferred_role": "arn:aws:iam::111122223333:role/my-test-role",
    "iss": "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example",
    "cognito:username": "my-test-user",
    "middle_name": "Jane",
    "nonce": "abcdefg",
    "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "cognito:roles": [
        "arn:aws:iam::111122223333:role/my-test-role"
    ],
    "aud": "xxxxxxxxxxxxexample",
    "identities": [
        {
            "userId": "amzn1.account.EXAMPLE",
            "providerName": "LoginWithAmazon",
            "providerType": "LoginWithAmazon",
            "issuer": null,
            "primary": "true",
            "dateCreated": "1642699117273"
        }
    ],
    "event_id": "64f513be-32db-42b0-b78e-b02127b4f463",
    "token_use": "id",
    "auth_time": 1676312777,
    "exp": 1676316377,
    "iat": 1676312777,
    "jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "email": "my-test-user@example.com"
}
.<token signature>
```

**`sub`**  
Un identificatore univoco ([UUID](cognito-terms.md#terms-uuid)), o oggetto, per l'utente autenticato. Il nome utente potrebbe non essere univoco nel pool di utenti. l'attestazione `sub` è il modo migliore per identificare un determinato utente.

**`cognito:groups`**  
Una serie di nomi di gruppi del pool di utenti che includono l'utente come membro. I gruppi possono essere un identificatore da presentare all'app oppure possono generare una richiesta per un ruolo IAM preferito da un pool di identità.

**`cognito:preferred_role`**  
L'ARN del ruolo IAM associato al gruppo dell'utente con la priorità più alta nel pool di utenti. Per ulteriori informazioni su come il pool di utenti seleziona questa attestazione ruolo, consulta [Assegnazione dei valori di priorità ai gruppi](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups).

**`iss`**  
Il provider di identità che ha emesso il token. L'attestazione ha il seguente formato.  
`https://cognito-idp.<Region>.amazonaws.com/<your user pool ID>`

**`cognito:username`**  
Il nome utente nel pool di utenti.

**`nonce`**  
L'`nonce`attestazione proviene da un parametro con lo stesso nome che puoi aggiungere alle richieste all'endpoint 2.0. OAuth `authorize` Quando si aggiunge il parametro, l'attestazione `nonce` è inclusa nel token ID emesso da Amazon Cognito e puoi usarla per proteggerti dagli attacchi di tipo replay. Se non fornisci un valore `nonce` nella tua richiesta, Amazon Cognito genera e convalida automaticamente un nonce quando esegui l'autenticazione tramite un provider di identità di terze parti, quindi lo aggiunge come attestazione `nonce` al token ID. L'implementazione dell'attestazione `nonce` in Amazon Cognito si basa su [standard OIDC](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation).

**`origin_jti`**  
Un identificatore di revoca del token associato al token di aggiornamento dell'utente. Amazon Cognito fa riferimento all'`origin_jti`affermazione quando verifica se hai revocato il token dell'utente con l'operazione [Endpoint Revoke](revocation-endpoint.md) o l'[RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)API. Quando revochi un token, Amazon Cognito invalida tutti i token di accesso e ID con lo stesso valore `origin_jti`.

**`cognito:roles`**  
Una serie di nomi di ruoli IAM associati ai gruppi dell'utente. A ogni gruppo di pool di utenti può essere associato un ruolo IAM. Questo array rappresenta tutti i ruoli IAM per i gruppi degli utenti, a prescindere dalla precedenza. Per ulteriori informazioni, consulta [Aggiunta di gruppi a un bacino d'utenza](cognito-user-pools-user-groups.md).

**`aud`**  
Il client dell'app del pool di utenti che ha autenticato l'utente. Amazon Cognito restituisce lo stesso valore nell'attestazione `client_id` del token di accesso.

**`identities`**  
Il contenuto dell'attributo `identities` dell'utente. L'attributo contiene informazioni su ogni profilo di gestore dell'identità digitale di terze parti collegato a un utente, tramite accesso federato o [collegando un utente federato a un profilo locale](cognito-user-pools-identity-federation-consolidate-users.md). Queste informazioni contengono il nome del gestore, il relativo ID univoco e altri metadati.

**`token_use`**  
Lo scopo previsto del token. In un token ID, il valore è `id`.

**`auth_time`**  
L'ora di fine dell'autenticazione dell'utente, in formato Unix.

**`exp`**  
L'ora di scadenza del token dell'utente, in formato Unix.

**`iat`**  
L'ora di emissione del token dell'utente da parte di Amazon Cognito, in formato Unix.

**`jti`**  
L'identificatore univoco del JWT.

Il token ID può contenere le attestazioni standard OIDC definite nelle [attestazioni standard OIDC](https://openid.net/specs/openid-connect-core-1_0.html#Claims). Il token ID può contenere inoltre gli attributi personalizzati definiti nel bacino d'utenza. Amazon Cognito scrive i valori degli attributi personalizzati nel token ID come stringhe indipendentemente dal tipo di attributo.

**Nota**  
Gli attributi personalizzati del pool di utenti hanno sempre il prefisso. `custom:` 

## Firma del token ID
<a name="user-pool-id-token-signature"></a>

La firma del token ID viene calcolata in base all'intestazione e al payload del token JWT. Verifica la firma del token prima di accettare le attestazioni in qualsiasi token ID ricevuto dall'app. Per ulteriori informazioni, consulta [Verifica dei token web JSON](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md).

# Comprendere il token di accesso
<a name="amazon-cognito-user-pools-using-the-access-token"></a>

Il token di accesso al bacino d'utenza contiene attestazioni relative all'utente autenticato, un elenco dei gruppi dell'utente e un elenco di ambiti. Lo scopo del token di accesso è autorizzare le operazioni API. Il pool di utenti accetta i token di accesso per autorizzare le operazioni self-service degli utenti. Ad esempio, puoi utilizzare il token di accesso per consentire agli utenti di accedere per aggiornare, modificare o eliminare gli attributi utente.

Con [gli ambiti OAuth 2.0](https://www.rfc-editor.org/rfc/rfc6749#section-3.3) in un token di accesso, derivati dagli ambiti personalizzati che aggiungi al tuo pool di utenti, puoi autorizzare l'utente a recuperare informazioni da un'API. Gateway Amazon API, ad esempio, supporta l'autorizzazione con token di accesso di Amazon Cognito. Puoi compilare un'autorizzazione REST API con le informazioni del pool di utenti o utilizzare Amazon Cognito come un'autorizzazione token web JSON per un'API HTTP. Per generare un token di accesso con ambiti personalizzati, è necessario effettuare la richiesta tramite gli [endpoint pubblici](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html) del pool di utenti.

Con il [piano di funzionalità](cognito-sign-in-feature-plans.md) Essentials o Plus, puoi anche implementare un trigger Lambda prima della generazione di token che aggiunge ambiti ai token di accesso in fase di esecuzione. Per ulteriori informazioni, consulta [Trigger Lambda di pre-generazione del token](user-pool-lambda-pre-token-generation.md).

Il token di accesso di un utente con lo `openid` scopo è l'autorizzazione a richiedere ulteriori informazioni sugli attributi dell'utente al. [Endpoint UserInfo](userinfo-endpoint.md) La quantità di informazioni dall'`userInfo`endpoint deriva dagli ambiti aggiuntivi del token di accesso: ad esempio, per tutti i dati dell'utente, `profile` per il relativo indirizzo `email` e-mail. 

Il token di accesso di un utente con lo `aws.cognito.signin.user.admin` scopo è l'autorizzazione a leggere e scrivere gli attributi utente, elencare i fattori di autenticazione, configurare le preferenze di autenticazione a più fattori (MFA) e gestire i dispositivi ricordati. Il livello di accesso agli attributi che il token di accesso concede a questo ambito corrisponde alle read/write autorizzazioni degli attributi che assegnate al client dell'app.

Il token di accesso è un [token Web JSON (JWT)](https://www.rfc-editor.org/rfc/rfc7519). L'intestazione per il token di accesso ha la stessa struttura del token ID. Amazon Cognito firma i token di accesso con una chiave diversa da quella usata per la firma dei token ID. Il valore di un'attestazione ID chiave di accesso (`kid`) non corrisponde al valore dell'attestazione `kid` di un token ID nella stessa sessione utente. Verifica nel codice dell'app i token ID e di accesso in modo indipendente. Non considerare attendibili le attestazioni contenute in un token di accesso finché non verifichi la firma. Per ulteriori informazioni, consulta [Verifica dei token web JSON](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md). È possibile configurare il periodo di scadenza del token di accesso su qualsiasi valore compreso tra 5 minuti e 1 giorno. Puoi configurare questo valore per il client dell'app.

**Importante**  
Per i token di accesso e ID, non specificare un periodo minimo inferiore a un'ora se utilizzi l'accesso gestito. L'accesso gestito imposta i cookie del browser che sono validi per un'ora. Se si configura una durata del token di accesso inferiore a un'ora, ciò non ha alcun effetto sulla validità del cookie di accesso gestito e sulla capacità degli utenti di riautenticarsi senza credenziali aggiuntive per un'ora dopo l'accesso iniziale.

## Intestazione del token di accesso
<a name="user-pool-access-token-header"></a>

L'intestazione contiene due informazioni: l'ID della chiave (`kid`) e l'algoritmo (`alg`).

```
{
"kid" : "1234example="
"alg" : "RS256",
}
```

**`kid`**  
L'ID della chiave . Il valore indica quale chiave è utilizzata per proteggere la firma JWS (JSON Web Signature) del token. È possibile visualizzare la chiave di firma del pool di utenti sull'endpoint. IDs `jwks_uri`  
Per ulteriori informazioni sul `kid` parametro, consulta la sezione [parametro di intestazione dell'ID della chiave (kid)](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.5).

**`alg`**  
L'algoritmo di crittografia utilizzato da Amazon Cognito per proteggere il token di accesso. I pool di utenti utilizzano un algoritmo RS256 crittografico, che è una firma RSA con SHA-256.  
Per ulteriori informazioni sul `alg` parametro, consultare la sezione relativa al [parametro di intestazione dell'algoritmo (alg)](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.4).

## Payload predefinito del token di accesso
<a name="user-pool-access-token-payload"></a>

Questo è un esempio di payload di un token di accesso. Per ulteriori informazioni, consultare la sezione relativa alle [attestazioni JWT](https://tools.ietf.org/html/rfc7519#section-4). Puoi aggiungere rivendicazioni personalizzate con un[Trigger Lambda di pre-generazione del token](user-pool-lambda-pre-token-generation.md).

```
<header>.
{
   "sub":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "device_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "cognito:groups":[
      "testgroup"
   ],
   "iss":"https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example",
   "version":2,
   "client_id":"xxxxxxxxxxxxexample",
   "aud": "https://api.example.com",
   "origin_jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "event_id":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "token_use":"access",
   "scope":"phone openid profile resourceserver.1/appclient2 email",
   "auth_time":1676313851,
   "exp":1676317451,
   "iat":1676313851,
   "jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "username":"my-test-user"
}
.<token signature>
```

**`sub`**  
Un identificatore univoco ([UUID](cognito-terms.md#terms-uuid)), o oggetto, per l'utente autenticato. Il nome utente potrebbe non essere univoco nel pool di utenti. l'attestazione `sub` è il modo migliore per identificare un determinato utente.

**`cognito:groups`**  
Una serie di nomi di gruppi del pool di utenti che includono l'utente come membro.

**`iss`**  
Il provider di identità che ha emesso il token. L'attestazione ha il seguente formato.  
`https://cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE`

**`client_id`**  
Il client dell'app del pool di utenti che ha autenticato l'utente. Amazon Cognito restituisce lo stesso valore nell'attestazione `aud` del token ID.

**aud**  
L'URL dell'API per cui il token di accesso è destinato ad autorizzare. Presente solo se l'applicazione ha richiesto un'[associazione di risorse](cognito-user-pools-define-resource-servers.md#cognito-user-pools-resource-binding) dal server di autorizzazione.

**`origin_jti`**  
Un identificatore di revoca del token associato al token di aggiornamento dell'utente. Amazon Cognito fa riferimento all'`origin_jti`affermazione quando verifica se hai revocato il token dell'utente con l'operazione [Endpoint Revoke](revocation-endpoint.md) o l'[RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)API. Quando revochi un token, Amazon Cognito non convalida più i token di accesso e ID con lo stesso valore. `origin_jti`

**`token_use`**  
Lo scopo previsto del token. In un token di accesso, il valore è `access`.

**`scope`**  
Un elenco di ambiti OAuth 2.0 rilasciato all'utente che ha effettuato l'accesso. Gli ambiti definiscono l'accesso che il token fornisce alle operazioni self-service esterne APIs degli utenti e ai dati degli utenti sull'endpoint. `userInfo` Un token dell'[Endpoint Token](token-endpoint.md) può contenere tutti gli ambiti supportati dal client dell'app. Un token dell'accesso API di Amazon Cognito contiene solo l'ambito `aws.cognito.signin.user.admin`.

**`auth_time`**  
L'ora di fine dell'autenticazione dell'utente, in formato Unix.

**`exp`**  
L'ora di scadenza del token dell'utente, in formato Unix.

**`iat`**  
L'ora di emissione del token dell'utente da parte di Amazon Cognito, in formato Unix.

**`jti`**  
L'identificatore univoco del JWT.

**`username`**  
Il nome utente dell'utente nel pool di utenti.

**Altre risorse**
+ [Come personalizzare i token di accesso nei pool di utenti di Amazon Cognito](https://aws.amazon.com/blogs/security/how-to-customize-access-tokens-in-amazon-cognito-user-pools/)

## Firma del token di accesso
<a name="user-pool-access-token-signature"></a>

La firma del token di accesso, firmata con la chiave pubblicizzata sull'`.well-known/jwks.json`endpoint, convalida l'integrità dell'intestazione e del payload del token. Quando utilizzi i token di accesso per autorizzare l'accesso a utenti esterni APIs, configura sempre l'autorizzatore dell'API per verificare questa firma rispetto alla chiave che l'ha firmata. Per ulteriori informazioni, consulta [Verifica dei token web JSON](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md).

# Aggiorna i token
<a name="amazon-cognito-user-pools-using-the-refresh-token"></a>

Puoi utilizzare il token di aggiornamento per recuperare nuovi ID e token di accesso. Di default, il token di aggiornamento scade 30 giorni dopo l'accesso dell'utente dell'app al bacino d'utenza. Quando crei un'applicazione per il bacino d'utenza, puoi impostare la scadenza del token di aggiornamento dell'applicazione su qualsiasi valore compreso tra 60 minuti e 10 anni. 

## Ottenere nuovi token di accesso e identità con un token di aggiornamento
<a name="amazon-cognito-user-pools-using-the-refresh-token_initiate-token"></a>

Amazon Cognito emette token di aggiornamento in risposta a un'autenticazione riuscita con il flusso di codice di autorizzazione all'accesso gestito e con operazioni API o metodi SDK. Il token di aggiornamento restituisce nuovi ID e token di accesso e, facoltativamente, un nuovo token di aggiornamento. È possibile utilizzare i token di aggiornamento nei seguenti modi.

**GetTokensFromRefreshToken**  
L'operazione [GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html)API emette nuovi ID e token di accesso da un token di aggiornamento valido. Ottieni anche un nuovo token di aggiornamento se hai abilitato la rotazione dei token di aggiornamento.

**InitiateAuth e AdminitiateAuth**  
Le operazioni [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)o [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API includono il flusso di `REFRESH_TOKEN_AUTH` autenticazione. In questo flusso, si passa un token di aggiornamento e si ottengono nuovi ID e token di accesso. Non puoi autenticarti con client interni `REFRESH_TOKEN_AUTH` all'app con rotazione dei token di [aggiornamento abilitata](#using-the-refresh-token-rotation).

**OAuth endpoint del token**  
L'[endpoint del token](token-endpoint.md) nei pool di utenti con un [dominio](cognito-user-pools-assign-domain.md) ha un tipo di `refresh_token` concessione che emette un nuovo ID, un nuovo accesso e, facoltativamente (con [rotazione del token di aggiornamento), token](#using-the-refresh-token-rotation) di aggiornamento da un token di aggiornamento valido.

## Aggiorna la rotazione dei token
<a name="using-the-refresh-token-rotation"></a>

Puoi facoltativamente configurare la rotazione dei token di aggiornamento nel client dell'app. Con la rotazione dei token di aggiornamento, il client può invalidare il token di aggiornamento originale ed emettere un nuovo token di aggiornamento ad ogni aggiornamento del token. *Quando questa impostazione è abilitata, ogni richiesta riuscita in tutte le forme di aggiornamento del token restituisce un nuovo ID, accesso e token di aggiornamento.* Quando questa impostazione è disabilitata, le richieste di aggiornamento dei token restituiscono solo nuovi token di accesso e ID e il token di aggiornamento originale rimane valido. Il nuovo token di aggiornamento è valido per la durata residua del token di aggiornamento originale. Puoi configurare [i client dell'app](user-pool-settings-client-apps.md) per ruotare i token di aggiornamento o per trasferire il token di aggiornamento originale. Per consentire nuovi tentativi per un breve periodo, puoi anche configurare un periodo di prova per il token di aggiornamento originale fino a 60 secondi.

**Cose da sapere sulla rotazione dei token di aggiornamento**
+ Dopo aver abilitato la rotazione dei token di aggiornamento, vengono aggiunte nuove attestazioni nei token web JSON dal tuo pool di utenti. Le attestazioni `origin_jti` e `jti` vengono aggiunte ai token di accesso e ID. Queste affermazioni aumentano le dimensioni di. JWTs
+ La rotazione dei token di aggiornamento non è compatibile con il flusso `REFRESH_TOKEN_AUTH` di autenticazione. Per implementare la rotazione dei token di aggiornamento, devi disabilitare questo flusso di autenticazione nel client dell'app e progettare l'applicazione per inviare richieste di aggiornamento dei token con l'operazione [GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html)API o il metodo SDK equivalente.
+ Con la rotazione dei token di aggiornamento inattiva, puoi completare le richieste di aggiornamento dei token con o. `GetTokensFromRefreshToken` `REFRESH_TOKEN_AUTH`
+ Quando [la memorizzazione del dispositivo](amazon-cognito-user-pools-device-tracking.md) è attiva nel tuo pool di utenti, devi fornire la chiave del dispositivo nelle richieste. `GetTokensFromRefreshToken` Se l'utente non dispone di una chiave del dispositivo confermata che l'applicazione invia nella richiesta di autenticazione iniziale, Amazon Cognito ne emette una nuova. Per aggiornare i token in questa configurazione, devi fornire una chiave del dispositivo, indipendentemente dal fatto che tu ne abbia specificata una `AuthParameters` o ne abbia ricevuta una nuova nella risposta di autenticazione.
+ Puoi passare `ClientMetadata` al trigger Lambda prima della generazione del token nella tua `GetTokensFromRefreshToken` richiesta. Questi dati, che vengono passati all'evento di input per il trigger, forniscono un contesto aggiuntivo che puoi utilizzare nella logica personalizzata della tua funzione Lambda.

Come best practice di sicurezza, abilita la rotazione dei token di aggiornamento sui client dell'app.

------
#### [ Enable refresh token rotation (console) ]

La procedura seguente attiva o disattiva la rotazione dei token di aggiornamento per il client dell'app. Questa procedura richiede un client di app esistente. Per ulteriori informazioni sulla creazione di un client per app, consulta[Impostazioni specifiche dell'applicazione con client di app](user-pool-settings-client-apps.md).

**Per abilitare la rotazione dei token di aggiornamento**

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

1. Scegli **User Pools (bacini d'utenza)**.

1. Scegli un bacino d'utenza esistente dall'elenco.

1. Vai al menu **App client** e seleziona un client di app esistente.

1. Seleziona **Modifica** nella sezione **Informazioni sul client dell'app** della pagina.

1. In **Configurazioni di sicurezza avanzate**, individua l'**opzione Abilita la rotazione del token di aggiornamento**.

1. Per abilitare la rotazione, seleziona la casella di controllo. Per disabilitare la rotazione, deseleziona la casella di controllo.

1. In **Periodo di grazia di rotazione del token di aggiornamento**, inserisci il numero di secondi, fino a 60, che desideri impostare come ritardo prima della revoca del token di aggiornamento ruotato verso l'esterno.

------
#### [ Enable refresh token rotation (API) ]

Configura la rotazione del token di aggiornamento in una richiesta o API. [CreateUserPoolClient[UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html) Il seguente corpo parziale della richiesta attiva la rotazione del token di aggiornamento e imposta il periodo di grazia su dieci secondi.

```
"RefreshTokenRotation" : {
   "Feature" : "ENABLED,
   "RetryGracePeriodSeconds" : 10
}
```

------

## Aggiornamento dell'API e dei token SDK
<a name="using-the-refresh-token-api"></a>

Esistono due modi per utilizzare il token di aggiornamento per ottenere un nuovo ID e accedere ai token con l'API dei pool di utenti, a seconda che la rotazione dei token di aggiornamento sia attiva. Nei client dell'app con rotazione del token di aggiornamento attiva, utilizza l'operazione API. [GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html) Nei client di app senza rotazione del token di aggiornamento, utilizza il `REFRESH_TOKEN_AUTH` flusso delle operazioni [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)o dell'[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API.

**Nota**  
Gli utenti possono autenticarsi con pool di utenti nell'[accesso gestito](cognito-user-pools-managed-login.md) o nelle applicazioni personalizzate con cui crei AWS SDKs e nelle operazioni API di Amazon Cognito. Il `REFRESH_TOKEN_AUTH` flusso e `GetTokensFromRefreshToken` possono entrambi completare l'aggiornamento del token per gli utenti con accesso gestito. L'aggiornamento dei token nelle applicazioni personalizzate non influisce sulle sessioni di accesso gestite. Queste sessioni sono impostate in un cookie del browser e sono valide per un'ora. La `GetTokensFromRefreshToken` risposta emette nuovi ID, accessi e, facoltativamente, token di aggiornamento, ma non rinnova il cookie della sessione di accesso gestita.  
`REFRESH_TOKEN_AUTH`non è disponibile nei client di app con la rotazione dei token di aggiornamento abilitata.

------
#### [ GetTokensFromRefreshToken ]

[GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html)restituisce nuovi ID, token di accesso e aggiornamento da una richiesta autorizzata con un token di aggiornamento. Di seguito è riportato un esempio di corpo della richiesta per. `GetTokensFromRefreshToken` Puoi inviare i metadati del client ai trigger Lambda nelle richieste di questa operazione.

```
{
    "RefreshToken": "eyJjd123abcEXAMPLE",
    "ClientId": "1example23456789",
    "ClientSecret": "myappclientsecret123abc",
    "ClientMetadata": { 
      "MyMetadataKey" : "MyMetadataValue" 
   },
}
```

------
#### [ AdminInitiateAuth/InitiateAuth ]

Per utilizzare il token di aggiornamento quando la rotazione del token di aggiornamento è inattiva, utilizza le operazioni o API. [AdminInitiateAuth[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) Invia `REFRESH_TOKEN_AUTH` per il parametro `AuthFlow`. Nella proprietà `AuthParameters` di `AuthFlow`, passa il token di aggiornamento dell'utente come valore di `"REFRESH_TOKEN"`. Amazon Cognito restituisce ID e token di accesso nuovi dopo che la richiesta API ha superato tutte le sfide.

Di seguito è riportato un esempio di corpo di richiesta per un aggiornamento del token con l'API or. `InitiateAuth` `AdminInitiateAuth`

```
{
    "AuthFlow": "REFRESH_TOKEN_AUTH",
    "ClientId": "1example23456789",
    "UserPoolId": "us-west-2_EXAMPLE",
    "AuthParameters": {
        "REFRESH_TOKEN": "eyJjd123abcEXAMPLE",
        "SECRET_HASH": "kT5acwCVrbD6JexhW3EQwnRSe6fLuPTRkEQ50athqv8="
    }
}
```

------

## OAuth aggiornamento del token
<a name="using-the-refresh-token-oauth"></a>

Puoi anche inviare token di aggiornamento a [Endpoint Token](token-endpoint.md) in un pool di utenti in cui hai configurato un dominio. Nel corpo della richiesta, includi un valore `grant_type` di `refresh_token` e un valore `refresh_token` del token di aggiornamento dell'utente.

Le richieste all'endpoint del token sono disponibili nei client dell'app con rotazione dei token di aggiornamento attiva e in quelli in cui è inattiva. Quando la rotazione del token di aggiornamento è attiva, l'endpoint del token restituisce un nuovo token di aggiornamento.

Di seguito è riportato un esempio di richiesta con un token di aggiornamento.

```
POST /oauth2/token HTTP/1.1
Host: auth.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
Content-Length: **

client_id=1example23456789&grant_type=refresh_token&refresh_token=eyJjd123abcEXAMPLE
```

## Revoca dei token di aggiornamento
<a name="amazon-cognito-identity-user-pools-revoking-all-tokens-for-user"></a>

È possibile revocare i token di aggiornamento che appartengono a un utente. Per ulteriori informazioni sulla revoca dei token, consulta [Fine delle sessioni utente con revoca del token](token-revocation.md). 

**Nota**  
La revoca del token di aggiornamento comporta la revoca di tutti i token ID e di accesso emessi da Amazon Cognito a seguito delle richieste di aggiornamento con tale token.

Per disconnettere gli utenti da tutte le sessioni di accesso correnti, revoca tutti i loro token con le nostre richieste API. [GlobalSignOut[AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GlobalSignOut.html) Dopo che l'utente viene disconnesso, si verifica quanto segue.
+ Il token di aggiornamento dell'utente non può ottenere nuovi token per l'utente.
+ Il token di accesso dell'utente non può effettuare richieste API autorizzate dal token.
+ L'utente deve effettuare nuovamente l'autenticazione per ottenere nuovi token. Poiché i cookie della sessione di accesso gestita non scadono automaticamente, l'utente può riautenticarsi con un cookie di sessione, senza richiedere ulteriori credenziali. Dopo aver disconnesso gli utenti con accesso gestito, reindirizzali al[Endpoint Logout](logout-endpoint.md), dove Amazon Cognito cancella il cookie di sessione.

Con i token di aggiornamento, puoi mantenere le sessioni degli utenti nella tua app a lungo. Nel tempo, i tuoi utenti potrebbero voler annullare l'autorizzazione di alcune applicazioni a cui sono rimasti connessi con i loro token di aggiornamento. Per disconnettere un utente da una singola sessione, revoca il token di aggiornamento. Quando l'utente desidera disconnettersi da tutte le sessioni autenticate, genera una richiesta API. [GlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GlobalSignOut.html) La tua app può presentare all'utente una scelta come **Esci da tutti i dispositivi**. `GlobalSignOut` accetta un token di accesso valido, inalterato, non scaduto e non revocato, di un utente. Poiché questa API è autorizzata dal token, un utente non può utilizzarla per avviare la disconnessione di un altro utente.

Tuttavia, puoi generare una richiesta [AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html)API che autorizzi con le tue AWS credenziali per disconnettere qualsiasi utente da tutti i suoi dispositivi. L'applicazione di amministrazione deve richiamare questa operazione API con le credenziali AWS dello sviluppatore e passare l'ID del pool di utenti e il nome utente dell'utente come parametri. L'API `AdminUserGlobalSignOut` è in grado di disconnettere qualsiasi utente nel bacino d'utenza.

Per ulteriori informazioni sulle richieste che è possibile autorizzare con AWS credenziali o con il token di accesso di un utente, vedere. [Elenco delle operazioni API raggruppate per modello di autorizzazione](authentication-flows-public-server-side.md#user-pool-apis-auth-unauth)

# Fine delle sessioni utente con revoca del token
<a name="token-revocation"></a>

È possibile revocare i token di aggiornamento e le sessioni degli utenti finali con i seguenti metodi. Quando si revoca un token di aggiornamento, tutti i token di accesso precedentemente emessi da tale token di aggiornamento diventano non validi. Gli altri token di aggiornamento rilasciati all'utente non sono interessati da questa operazione.

**RevokeToken operazione**  
[RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)revoca tutti i token di accesso per un determinato token di aggiornamento, incluso il token di accesso iniziale dall'accesso interattivo. Questa operazione non ha effetto su nessuno degli altri token di aggiornamento dell'utente o sui figli ID e token di accesso di quegli altri token di aggiornamento.

**Endpoint di revoca**  
L'[endpoint di revoca revoca](revocation-endpoint.md) un determinato token di aggiornamento e tutti gli ID e i token di accesso generati dal token di aggiornamento. Questo endpoint revoca anche il token di accesso iniziale dall'accesso interattivo. Le richieste a questo endpoint non influiscono su nessuno degli altri token di aggiornamento dell'utente o sui figli ID e token di accesso di tali altri token di aggiornamento.

**GlobalSignOut operazione**  
[GlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GlobalSignOut.html)è un'operazione self-service che un utente autorizza con il proprio token di accesso. Questa operazione revoca tutti i token di aggiornamento, ID e accesso dell'utente richiedente.

**AdminUserGlobalSignOut operazione**  
[AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html)è un'operazione lato server che un amministratore autorizza con credenziali IAM. Questa operazione revoca tutti i token di aggiornamento, ID e accesso dell'utente di destinazione.

**Cose da sapere sulla revoca dei token**
+ La richiesta per revocare un token di aggiornamento deve includere l'ID client utilizzato per ottenerlo.
+  JWTs I pool di utenti sono autonomi con una firma e un orario di scadenza assegnati al momento della creazione del token. I token revocati non possono essere utilizzati con chiamate API Amazon Cognito che richiedono un token. Tuttavia, i token revocati saranno comunque validi se vengono verificati utilizzando una qualsiasi libreria JWT che verifica la firma e la scadenza del token.
+ Quando crei un nuovo client del bacino d'utenza, la revoca dei token è attivata di default.
+ È possibile revocare i token di aggiornamento solo nei client di app con la revoca dei token abilitata. 
+ Dopo aver abilitato la revoca dei token, nuove richieste vengono aggiunte nei token web JSON di Amazon Cognito. Le attestazioni `origin_jti` e `jti` vengono aggiunte ai token di accesso e ID. Queste attestazioni aumentano le dimensioni dei token ID e di accesso del client dell'app.
+ Quando disabiliti la revoca dei token in un client di app in cui era abilitata in precedenza, i token revocati non diventano più attivi.
+ Quando [disabiliti un account utente](how-to-manage-user-accounts.md#manage-user-accounts-enable-disable) (che revoca i token di aggiornamento e accesso), i token revocati non diventano attivi se abiliti nuovamente l'account utente.
+ Quando crei un nuovo client con pool di utenti utilizzando l', l'o l' AWS API Console di gestione AWS AWS CLI, la revoca dei token è abilitata per impostazione predefinita.

## Abilitazione della revoca dei token
<a name="enable-token-revocation"></a>

Prima di poter revocare un token per un client del bacino d'utenza esistente, è necessario abilitare la revoca del token. È possibile abilitare la revoca dei token per i client del pool di utenti esistenti utilizzando AWS CLI o l' AWS API. Per fare ciò, chiama il comando `aws cognito-idp describe-user-pool-client` della CLI o l'operazione API `DescribeUserPoolClient` per recuperare le impostazioni correnti dal client app. Quindi, chiama il comando `aws cognito-idp update-user-pool-client` della CLI o l'operazione API `UpdateUserPoolClient`. Includi le impostazioni correnti dal client app e imposta il parametro `EnableTokenRevocation` su `true`.

Per creare o modificare un client di app con revoca del token abilitata con l'API Amazon Cognito o con AWS un SDK, includi il seguente parametro nella [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)tua [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)richiesta o API.

```
"EnableTokenRevocation": true
```

Per configurare la revoca dei token nella console Amazon Cognito, seleziona un client dell'app dal menu **App** client nel tuo pool di utenti. **Seleziona il pulsante **Modifica** nelle **informazioni sul client dell'app** e abilita o disabilita la revoca del token in Configurazione avanzata.**

## Revoca di un token
<a name="revoke-tokens-api"></a>

È possibile revocare un token di aggiornamento utilizzando una richiesta [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)API, ad esempio con il comando `[aws cognito-idp revoke-token](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/revoke-token.html)` CLI. Puoi anche revocare i token usando il [Endpoint Revoke](revocation-endpoint.md). Questo endpoint diventa disponibile dopo l'aggiunta di un dominio al bacino d'utenza. Puoi utilizzare l'endpoint di revoca su un dominio ospitato Amazon Cognito o sul tuo dominio personalizzato.

Di seguito è riportato il corpo di una richiesta API `RevokeToken` di esempio.

```
{
   "ClientId": "1example23456789",
   "ClientSecret": "abcdef123456789ghijklexample",
   "Token": "eyJjdHkiOiJKV1QiEXAMPLE"
}
```

Di seguito è riportato un esempio di richiesta cURL all'endpoint `/oauth2/revoke` di un pool di utenti con un dominio personalizzato.

```
curl --location 'auth.mydomain.com/oauth2/revoke' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic Base64Encode(client_id:client_secret)' \
--data-urlencode 'token=abcdef123456789ghijklexample' \
--data-urlencode 'client_id=1example23456789'
```

L'operazione `RevokeToken` e l'endpoint `/oauth2/revoke` non richiedono alcuna autorizzazione aggiuntiva a meno che il client dell'app non disponga di un segreto del client.

# Verifica dei token web JSON
<a name="amazon-cognito-user-pools-using-tokens-verifying-a-jwt"></a>

I token web JSON (JWTs) possono essere decodificati, letti e modificati facilmente. Un token di accesso modificato crea un rischio di escalation dei privilegi. Un token ID modificato crea un rischio di impersonificazione. L'applicazione considera attendibile il pool di utenti come emittente di token, ma cosa succede se un utente intercetta il token in transito? Devi assicurarti che la tua applicazione riceva lo stesso token emesso da Amazon Cognito.

Amazon Cognito emette token che utilizzano alcune delle funzionalità di integrità e riservatezza della specifica OpenID Connect (OIDC). I token del pool di utenti indicano la validità con oggetti come l'ora di scadenza, l'emittente e la firma digitale. La firma, il terzo e ultimo segmento del JWT `.` delimitato, è il componente chiave della convalida dei token. Un utente malintenzionato può modificare un token, ma se l'applicazione recupera la chiave pubblica e confronta la firma, questa non corrisponderà. Qualsiasi applicazione che elabora JWTs l'autenticazione OIDC deve eseguire questa operazione di verifica a ogni accesso.

In questa pagina, forniamo alcuni consigli generali e specifici per la verifica di. JWTs Lo sviluppo di applicazioni abbraccia una varietà di linguaggi e piattaforme di programmazione. Poiché Amazon Cognito implementa OIDC in modo sufficientemente simile alle specifiche pubbliche, qualsiasi libreria JWT affidabile nel tuo ambiente di sviluppo preferito può gestire i tuoi requisiti di verifica.

Queste fasi descrivono la verifica del token JWT (JSON Web Token) di un bacino d'utenza.

**Topics**
+ [Prerequisiti](#amazon-cognito-user-pools-using-tokens-prerequisites)
+ [Convalida i token con aws-jwt-verify](#amazon-cognito-user-pools-using-tokens-aws-jwt-verify)
+ [Comprensione e ispezione dei token](#amazon-cognito-user-pools-using-tokens-manually-inspect)

## Prerequisiti
<a name="amazon-cognito-user-pools-using-tokens-prerequisites"></a>

La tua libreria, il tuo SDK o il tuo framework software potrebbero già gestire le attività descritte in questa sezione. AWS SDKs fornisci strumenti per la gestione e la gestione dei token del pool di utenti di Amazon Cognito nella tua app. AWS Amplify include funzioni per recuperare e aggiornare i token Amazon Cognito.

Per ulteriori informazioni, consulta le pagine seguenti.
+ [Integrazione dell'autenticazione e dell'autorizzazione di Amazon Cognito con app web e mobili](cognito-integrate-apps.md)
+ [Esempi di codice per l'utilizzo di Amazon Cognito Identity Provider AWS SDKs](https://docs.aws.amazon.com/cognito/latest/developerguide/service_code_examples.html)
+ [Advanced workflows](https://docs.amplify.aws/lib/auth/advanced/q/platform/js/#retrieve-jwt-tokens) (Flussi di lavoro avanzati) in *Amplify Dev Center* (Centro per sviluppatori Amplify)

Per la decodifica e la verifica di un token Web JSON (JWT) sono disponibili numerose librerie. Queste librerie sono utili se vuoi gestire i token manualmente per l'elaborazione dell'API lato server oppure se stai usando altri linguaggi di programmazione. Consulta [l'elenco di librerie OpenID Foundation per l'operatività con i token JWT](http://openid.net/developers/jwt/).

## Convalida i token con aws-jwt-verify
<a name="amazon-cognito-user-pools-using-tokens-aws-jwt-verify"></a>

In un'app Node.js, AWS consiglia alla [aws-jwt-verifylibreria](https://github.com/awslabs/aws-jwt-verify) di convalidare i parametri nel token che l'utente passa all'app. Con `aws-jwt-verify` puoi popolare `CognitoJwtVerifier` con i valori delle attestazioni che desideri verificare per uno o più pool di utenti. Di seguito sono riportati alcuni valori che possono essere verificati.
+ Verifica che i token di accesso o ID non siano malformati o scaduti e abbiano una firma valida.
+ Verifica che i token di accesso provengano dai [pool di utenti e dai client dell'app corretti](https://github.com/awslabs/aws-jwt-verify#verifying-jwts-from-amazon-cognito).
+ Le dichiarazioni relative al token di accesso contengono gli [ambiti OAuth 2.0 corretti](https://github.com/awslabs/aws-jwt-verify#checking-scope).
+ Verifica che le chiavi che hanno firmato i token ID e di accesso [corrispondano a una chiave di firma `kid` dell'*URI JWKS* dei pool di utenti](https://github.com/awslabs/aws-jwt-verify#the-jwks-cache).

  L'URI JWKS contiene le informazioni pubbliche sulla chiave privata usata per la firma del token dell'utente. Puoi trovare l'URI JWKS del tuo pool di utenti all'indirizzo `https://cognito-idp.<Region>.amazonaws.com/<userPoolId>/.well-known/jwks.json`.

Per ulteriori informazioni e codice di esempio che è possibile utilizzare in un'app Node.js o in un programma di AWS Lambda autorizzazione, vedere [https://github.com/awslabs/aws-jwt-verify](https://github.com/awslabs/aws-jwt-verify)su. GitHub

## Comprensione e ispezione dei token
<a name="amazon-cognito-user-pools-using-tokens-manually-inspect"></a>

Prima di integrare l'ispezione dei token con la tua app, considera come si assembla Amazon Cognito. JWTs Recupera i token di esempio dal pool di utenti, decodificali ed esaminali accuratamente per comprenderne le caratteristiche e determinare cosa vuoi verificare e quando. Ad esempio, potresti voler esaminare l'appartenenza al gruppo in uno scenario e gli ambiti in un altro.

Le seguenti sezioni descrivono un processo per ispezionare manualmente Amazon JWTs Cognito durante la preparazione dell'app.

### Conferma della struttura del JWT
<a name="amazon-cognito-user-pools-using-tokens-step-1"></a>

Un token Web JSON (JWT) include tre sezioni separate con il delimitatore `.` (punto).

**Header**  
L'ID della chiave (`kid`) e l'algoritmo RSA (`alg`) utilizzati da Amazon Cognito per firmare il token. Amazon Cognito firma i token con un `alg` di `RS256`. `kid`È un riferimento troncato a una chiave di firma privata RSA a 2048 bit detenuta dal tuo pool di utenti.

**Carico utile**  
Le attestazioni del token. In un token ID, le attestazioni includono gli attributi dell'utente e le informazioni sul pool di utenti (`iss`) e sul client dell'app (`aud`). In un token di accesso, il payload include gli ambiti, l'appartenenza al gruppo, il pool di utenti come `iss` e il client dell'app come `client_id`.

**Firma**  
La firma non è decodificabile in base64url come l'header e il payload. È un RSA256 identificatore derivato da una chiave di firma e da parametri che puoi osservare nel tuo URI JWKS.

L'header e il payload sono JSON con codifica base64url. Puoi identificarli tramite i caratteri di apertura `eyJ` che si decodificano nel carattere iniziale `{`. Se l'utente presenta alla tua app un JWT con codifica base64url e non è nel formato`[JSON Header].[JSON Payload].[Signature]`, non è un token Amazon Cognito valido e puoi eliminarlo.

L'applicazione di esempio seguente verifica i token del pool di utenti con. `aws-jwt-verify`

```
// cognito-verify.js
// Usage example: node cognito-verify.js eyJra789ghiEXAMPLE

const { CognitoJwtVerifier } = require('aws-jwt-verify');

// Replace with your Amazon Cognito user pool ID
const userPoolId = 'us-west-2_EXAMPLE';

async function verifyJWT(token) {
  try {
    const verifier = CognitoJwtVerifier.create({
      userPoolId,
      tokenUse: 'access', // or 'id' for ID tokens
      clientId: '1example23456789', // Optional, only if you need to verify the token audience
    });

    const payload = await verifier.verify(token);
    console.log('Decoded JWT:', payload);
  } catch (err) {
    console.error('Error verifying JWT:', err);
  }
}

// Example usage
if (process.argv.length < 3) {
  console.error('Please provide a JWT token as an argument.');
  process.exit(1);
}

const MyToken = process.argv[2];
verifyJWT(MyToken);
```

### Convalida del JWT
<a name="amazon-cognito-user-pools-using-tokens-step-2"></a>

La firma JWT è una combinazione con hash di intestazione e payload. Amazon Cognito genera due coppie di chiavi di crittografia RSA per ogni bacino d'utenza. Una chiave privata firma i token di accesso e l'altra i token ID.

**Per verificare la firma di un token JWT**

1. Decodifica il token ID.

   Anche OpenID Foundation [mantiene un elenco di librerie per l'utilizzo di token JWT](http://openid.net/developers/jwt/).

   È inoltre possibile utilizzarlo AWS Lambda per decodificare il pool di utenti. JWTs Per ulteriori informazioni, consulta [Decodificare e verificare utilizzando i token Amazon Cognito JWT](https://github.com/awslabs/aws-support-tools/tree/master/Cognito/decode-verify-jwt). AWS Lambda

1. Confronta l'ID della chiave (`kid`) locale con il `kid` pubblico.

   1. Scarica e archivia la chiave JWK (JSON Web Key) pubblica corrispondente per il tuo bacino d'utenza. È disponibile come parte di un set JWKS (JSON Web Key Set). Puoi individuarlo creando il seguente URI `jwks_uri` per l'ambiente:

      ```
      https://cognito-idp.<Region>.amazonaws.com/<userPoolId>/.well-known/jwks.json
      ```

      Per ulteriori informazioni su JWK e JWKS, consulta l'articolo su [JSON Web Key (JWK)](https://tools.ietf.org/html/rfc7517).
**Nota**  
Amazon Cognito può alternare le chiavi di firma nel pool di utenti. Come procedura consigliata, memorizza nella cache le chiavi pubbliche dell'app utilizzando il `kid` come chiave di cache e aggiorna periodicamente la cache. Confronta il `kid` nei token che la tua app riceve nella cache.  
Se ricevi un token con l'emittente corretto ma un diverso `kid`, è possibile che Amazon Cognito abbia alternato la chiave di firma. Aggiorna la cache dall'endpoint `jwks_uri` del pool di utenti.

      Questo è un file `jwks.json` di esempio:

      ```
      {
      	"keys": [{
      		"kid": "1234example=",
      		"alg": "RS256",
      		"kty": "RSA",
      		"e": "AQAB",
      		"n": "1234567890",
      		"use": "sig"
      	}, {
      		"kid": "5678example=",
      		"alg": "RS256",
      		"kty": "RSA",
      		"e": "AQAB",
      		"n": "987654321",
      		"use": "sig"
      	}]
      }
      ```  
**ID chiave (`kid`)**  
Il `kid` è un suggerimento che indica quale chiave è stata utilizzata per proteggere la JSON Web Signature (JWS) del token.  
**Algoritmo (`alg`)**  
Il parametro di intestazione `alg` rappresenta l'algoritmo di crittografia utilizzato per proteggere il token ID. I pool di utenti utilizzano un algoritmo RS256 crittografico, che è una firma RSA con SHA-256. Per ulteriori informazioni su RSA, consulta [crittografia RSA](https://tools.ietf.org/html/rfc3447).   
**Tipo di chiavi (`kty`)**  
Il parametro `kty` identifica la famiglia di algoritmi di crittografia usata con la chiave, come "RSA" in questo esempio.  
**Esponente RSA (`e`)**  
Il parametro `e` contiene il valore dell'esponente per la chiave pubblica RSA. È rappresentato come valore codificato in Base64url. UInt  
**Modulo RSA (`n`)**  
Il parametro `n` contiene il valore del modulo per la chiave pubblica RSA. È rappresentato come valore con codifica Base64url. UInt  
**Utilizza (`use`)**  
Il parametro `use` descrive l'uso previsto della chiave pubblica. Per questo esempio, il valore `use` value `sig` rappresenta la firma.

   1. Cerca la JSON Web Key pubblica per un `kid` che corrisponde al `kid` del JWT.

### Verifica delle attestazioni
<a name="amazon-cognito-user-pools-using-tokens-step-3"></a>

**Per verificare le attestazioni JWT**

1. Con uno dei seguenti metodi, verifica che il token non sia scaduto.

   1. Decodifica il token e confronta la richiesta `exp` con l'ora corrente.

   1. Se il tuo token di accesso include un `aws.cognito.signin.user.admin` reclamo, invia una richiesta a un'API come. [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html) Le richieste API di [autorizzazione con un token di accesso](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html#user-pool-apis-auth-unauth) restituiscono un errore se il token è scaduto.

   1. Presenta il tuo token di accesso in una richiesta a [Endpoint UserInfo](userinfo-endpoint.md). La tua richiesta restituisce un errore se il token è scaduto.

1. L'attestazione `aud` in un token ID e l'attestazione `client_id` in un token di accesso deve corrispondere all'ID client di app creato nel bacino d'utenza di Amazon Cognito.

1. L'attestazione dell'approvatore (`iss`) deve corrispondere al bacino d'utenza. Ad esempio, un bacino d'utenza creato nella regione `us-east-1` avrà un valore `iss` di:

   `https://cognito-idp.us-east-1.amazonaws.com/<userpoolID>`.

1. Controlla l'attestazione `token_use`. 
   + Se accetti il token di accesso solo nelle operazioni dell'API Web, il valore deve essere `access`.
   + Se utilizzi solo il token ID, il valore deve essere `id`.
   + Se si usano sia ID sia token di accesso, l'attestazione `token_use` deve essere `id` o `access`.

Ora è possibile considerare attendibili le attestazioni all'interno del token.

# Gestione della scadenza e della memorizzazione nella cache dei token del pool di utenti
<a name="amazon-cognito-user-pools-using-tokens-caching-tokens"></a>

L'app deve completare una delle seguenti richieste ogni volta che desideri ottenere un nuovo token web JSON (JWT).
+ Richiesta di una [concessione](https://www.rfc-editor.org/rfc/rfc6749#section-1.3) di credenziali client o codici di autorizzazione dall'[Endpoint Token](token-endpoint.md).
+ Richiedi una concessione implicita dalle tue pagine di accesso gestite.
+ Autentica un utente locale in una richiesta API Amazon Cognito come. [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)

Puoi configurare il pool di utenti in modo da impostare la scadenza dei token entro un valore definito in minuti, ore o giorni. Per garantire le prestazioni e la disponibilità della tua app, utilizza i token Amazon Cognito per circa il 75% della durata del token e solo dopo recupera nuovi token. Una soluzione di caching creata per l'app mantiene disponibili i token e impedisce ad Amazon Cognito di rifiutare le richieste quando la frequenza delle richieste è troppo alta. Un'app lato client deve archiviare i token in una cache di memoria. Un'app lato server può aggiungere un meccanismo di caching crittografato per archiviare i token.

Quando il tuo pool di utenti genera un volume elevato di utenti o machine-to-machine attività, potresti incontrare i limiti imposti da Amazon Cognito sul numero di richieste di token che puoi effettuare. Per ridurre il numero di richieste inviate agli endpoint Amazon Cognito, è possibile archiviare e riutilizzare in modo sicuro i dati di autenticazione o implementare backoff esponenziale e nuovi tentativi.

I dati di autenticazione provengono da due classi di endpoint. Gli endpoint Amazon Cognito [OAuth2.0 includono l'endpoint](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html) token, che gestisce le credenziali dei client e le richieste di codice di autorizzazione all'accesso gestito. Gli [endpoint del servizio](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html#cognito_identity_your_user_pools_region) rispondono a richieste API come `InitiateAuth` e `RespondToAuthChallenge`. Ogni tipo di richiesta è caratterizzato da un limite specifico. Per ulteriori informazioni sui limiti, consulta [Quote in Amazon Cognito](quotas.md).

## Memorizzazione nella cache dei token di machine-to-machine accesso con Amazon API Gateway
<a name="amazon-cognito-user-pools-using-tokens-caching-tokens-API-gateway"></a>

Con la memorizzazione nella cache dei token di API Gateway, la tua app può scalare in risposta a eventi superiori alla quota di frequenza di richiesta predefinita degli endpoint Amazon OAuth Cognito.

![\[Un diagramma di un API Gateway che mantiene una cache di token di accesso per M2M. Il proxy API elabora la richiesta di token e restituisce un token memorizzato nella cache se uno è già valido.\]](http://docs.aws.amazon.com/it_it/cognito/latest/developerguide/images/user-pools-m2m-caching.png)


Puoi memorizzare nella cache i token di accesso in modo che l'app richieda un nuovo token di accesso solo se un token memorizzato nella cache è scaduto. In caso contrario, l'endpoint di caching restituisce un token dalla cache. Ciò evita una chiamata aggiuntiva a un endpoint dell'API Amazon Cognito. Quando si utilizza Gateway Amazon API come proxy per l'[Endpoint Token](token-endpoint.md), l'API risponde alla maggior parte delle richieste che altrimenti contribuirebbero alla quota di richieste, evitando richieste non riuscite risultanti dalla limitazione della frequenza.

La seguente soluzione basata su Gateway API offre un'implementazione a bassa latenza, a bassa presenza di codice/senza codice del caching dei token. Gli API Gateway APIs sono crittografati in transito e, facoltativamente, a riposo. Una cache API Gateway è ideale per la concessione di [credenziali client OAuth 2.0, un tipo di concessione](https://datatracker.ietf.org/doc/html/rfc6749#section-4.4) spesso ad alto volume che produce token di accesso per l'autorizzazione machine-to-machine e sessioni di microservizi. In un evento come un aumento del traffico che causa la scalabilità orizzontale dei microservizi, è possibile che molti sistemi utilizzino le stesse credenziali client a un volume che supera il limite di frequenza di richiesta del pool di utenti o del client dell' AWS app. Per preservare la disponibilità delle app e la bassa latenza, una soluzione di caching è la best practice consigliata in tali scenari.

In questa soluzione, definisci una cache nell'API per archiviare un token di accesso separato per ogni combinazione di OAuth ambiti e client dell'app che desideri richiedere nell'app. Quando l'app effettua una richiesta corrispondente alla chiave della cache, l'API risponde con un token di accesso emesso da Amazon Cognito alla prima richiesta corrispondente alla chiave della cache. Alla scadenza della chiave, l'API inoltra la richiesta all'endpoint del token e memorizza nella cache un nuovo token di accesso.

**Nota**  
La durata della chiave della cache deve essere inferiore alla durata del token di accesso del client dell'app.

La chiave della cache è una combinazione degli OAuth ambiti richiesti nel `scope` parametro nel corpo della richiesta e nell'`Authorization`intestazione della richiesta. L'intestazione `Authorization` contiene l'ID del client dell'app e il segreto client. Non è necessario implementare una logica aggiuntiva nell'app per implementare questa soluzione. È solo necessario aggiornare la configurazione per modificare il percorso dell'endpoint del token del pool di utenti.

Puoi anche implementare la memorizzazione nella cache dei token con [ElastiCache (Redis](https://docs.aws.amazon.com/elasticache/index.html) OSS). Per un controllo granulare con le policy AWS Identity and Access Management (IAM), valuta l'ipotesi di utilizzare una cache [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/authentication-and-access-control.html#authentication).

**Nota**  
Il caching in Gateway API è soggetto a costi aggiuntivi. [Per maggiori dettagli, consulta la pagina relativa ai prezzi.](https://aws.amazon.com/api-gateway/pricing)<a name="amazon-cognito-user-pools-using-tokens-caching-tokens-API-gateway-how-to"></a>

**Per configurare un proxy di caching con Gateway API**

1. Apri la [Console Gateway API](https://console.aws.amazon.com/apigateway/main/apis) e crea una REST API.

1. In **Resources** (Risorse), crea un metodo POST.

   1. In **Integration type** (Tipo di integrazione), scegli HTTP.

   1. Seleziona **Use HTTP proxy integration** (Utilizza integrazione proxy HTTP).

   1. In **Endpoint URL** (URL endpoint), immetti un URL nel formato `https://<your user pool domain>/oauth2/token`.

1. In **Resources** (Risorse), configura la chiave della cache.

   1. In **Method request** (Richiesta metodo), modifica la richiesta del metodo POST.
**Nota**  
Questo metodo di convalida della richiesta deve essere utilizzato con l'`client_secret_basic`autorizzazione nelle richieste di token, in cui il segreto del client è codificato nell'intestazione della richiesta. `Authorization` [Per la convalida del corpo della richiesta JSON nell'`client_secret_post`autorizzazione, crea invece un [modello di dati](https://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings-models.html) che richieda la presenza di client\$1secret.](token-endpoint.md#post-token-request-parameters-in-body) In questo modello, il **validatore Request dovrebbe convalidare** **il corpo, i parametri della stringa di query** e le intestazioni.

   1. Configura il metodo **Request validator per convalidare** i parametri e le intestazioni della **stringa di query**. Per ulteriori informazioni sulla convalida della richiesta, consulta [Request validation](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html) nella *Amazon API Gateway Developer Guide*.

   1. Imposta il parametro `scope` e l'intestazione `Authorization` come chiave di caching.

      1. Aggiungi una stringa di query ai parametri della stringa di **query URL**. Inserisci il **nome** della stringa di query `scope` e seleziona **Obbligatorio e Memorizzazione** **nella cache**.

      1. Aggiungi un'intestazione alle intestazioni delle **richieste HTTP**. **Inserisci il **nome** dell'intestazione della richiesta `Authorization` e seleziona **Obbligatorio** e Memorizzazione nella cache.**

1. In **Stages** (Fasi), configura il caching.

   1. Scegliete la fase che desiderate modificare e scegliete **Modifica da Dettagli** **della fase**.

   1. In **Impostazioni aggiuntive**, **Impostazioni cache**, attiva l'opzione **cache Provision API**.

   1. Scegli un valore in **Cache capacity** (Capacità cache). Una maggiore capacità di cache migliora le prestazioni ma comporta costi aggiuntivi.

   1. Deseleziona la casella di controllo **Richiedi autorizzazione**. Seleziona **Continua**.

   1. API Gateway applica le policy di cache ai metodi GET solo a livello di fase. È necessario applicare un'eccezione alla politica della cache al metodo POST.

      Espandi la fase che hai configurato e seleziona il `POST` metodo. Per creare le impostazioni della cache per il metodo, scegliete **Create override**.

   1. Attiva l'opzione **Abilita la cache del metodo**.

   1. Inserisci una ****cache time-to-live (TTL)**** di 3600 secondi. Scegli **Save** (Salva).

1. In **Stages** (Fasi), annota il valore visualizzato in **Invoke URL** (Richiama URL).

1. Aggiorna la tua app per le richieste di token POST in base al valore di **Invoke URL** (Richiama URL) della tua API anziché in base all'endpoint `/oauth2/token` del pool di utenti.