

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

# L'utente dichiara il superamento e la verifica della firma in Verified Access
<a name="user-claims-passing"></a>

Dopo che un' Accesso verificato da AWS istanza ha autenticato correttamente un utente, invia le dichiarazioni utente ricevute dall'IdP all'endpoint Verified Access. Le dichiarazioni degli utenti sono firmate in modo che le applicazioni possano verificare le firme e verificare anche che le attestazioni siano state inviate da Verified Access. Durante questo processo, viene aggiunta la seguente intestazione HTTP:

`x-amzn-ava-user-context`

Questa intestazione contiene le affermazioni degli utenti in formato token web JSON (JWT). Il formato JWT include un'intestazione, un carico utile e una firma con codifica URL base64. Verified Access utilizza ES384 (algoritmo di firma ECDSA che utilizza l'algoritmo hash SHA-384) per generare la firma JWT.

Le applicazioni possono utilizzare queste dichiarazioni per la personalizzazione o altre esperienze specifiche dell'utente. Gli sviluppatori di applicazioni devono informarsi sul livello di unicità e verifica di ogni affermazione fornita dal fornitore di identità prima dell'uso. In generale, l'`sub`affermazione è il modo migliore per identificare un determinato utente.

**Topics**
+ [Dichiarazioni degli utenti JWT per OIDC](#oidc-sample)
+ [Dichiarazioni degli utenti di JWT per IAM Identity Center](#IdC-sample)
+ [Chiavi pubbliche](#public-keys)
+ [Recupero e decodifica di JWT](#sample-code)

## Esempio: dichiarazioni utente firmate JWT for OIDC
<a name="oidc-sample"></a>

Gli esempi seguenti mostrano come appariranno l'intestazione e il payload per le dichiarazioni degli utenti OIDC nel formato JWT.

Intestazione di esempio:

```
{
   "alg": "ES384",
   "kid": "12345678-1234-1234-1234-123456789012",
   "signer": "arn:aws:ec2:us-east-1:123456789012:verified-access-instance/vai-abc123xzy321a2b3c", 
   "iss": "OIDC Issuer URL",
   "exp": "expiration" (120 secs)
}
```

Esempio di payload:

```
{
   "sub": "xyzsubject",
   "email": "xxx@amazon.com",
   "email_verified": true,
   "groups": [
      "Engineering",
      "finance"
   ],
   "additional_user_context": {
      "aud": "xxx",
      "exp": 1000000000,
      "groups": [
         "group-id-1",
         "group-id-2"
      ],
      "iat": 1000000000,
      "iss": "https://oidc-tp.com/",
      "sub": "xyzsubject",
      "ver": "1.0"
   }
}
```

## Esempio: dichiarazioni utente firmate JWT for IAM Identity Center
<a name="IdC-sample"></a>

Gli esempi seguenti mostrano come appariranno l'intestazione e il payload per le dichiarazioni degli utenti di IAM Identity Center nel formato JWT.

**Nota**  
Per IAM Identity Center, nelle dichiarazioni verranno incluse solo le informazioni sull'utente.

Intestazione di esempio:

```
{
   "alg": "ES384",
   "kid": "12345678-1234-1234-1234-123456789012",
   "signer": "arn:aws:ec2:us-east-1:123456789012:verified-access-instance/vai-abc123xzy321a2b3c", 
   "iss": "arn:aws:ec2:us-east-1:123456789012:verified-access-trust-provider/vatp-abc123xzy321a2b3c",
   "exp": "expiration" (120 secs)
}
```

Esempio di payload:

```
{
    "user": {
        "user_id": "f478d4c8-a001-7064-6ea6-12423523",
        "user_name": "test-123",
        "email": {
            "address": "test@amazon.com",
            "verified": false
        }
    }
}
```

## Chiavi pubbliche
<a name="public-keys"></a>

Poiché le istanze di accesso verificato non crittografano le dichiarazioni degli utenti, ti consigliamo di configurare gli endpoint di accesso verificato per utilizzare HTTPS. Se configuri il tuo endpoint di accesso verificato per utilizzare HTTP, assicurati di limitare il traffico verso l'endpoint utilizzando i gruppi di sicurezza.

Per garantire la sicurezza, è necessario verificare la firma prima di eseguire qualsiasi autorizzazione in base alle affermazioni e verificare che il `signer` campo nell'intestazione JWT contenga l'ARN dell'istanza Verified Access previsto.

Per ottenere la chiave pubblica, ottenere la chiave ID dall'intestazione JWT e utilizzarla per cercare la chiave pubblica dall'endpoint.

L'endpoint per ciascuno è il seguente: Regione AWS 

`https://public-keys.prod.verified-access.<region>.amazonaws.com/<key-id>`

## Esempio: recupero e decodifica di JWT
<a name="sample-code"></a>

Il seguente esempio di codice mostra come ottenere l'ID della chiave, la chiave pubblica e il payload in Python 3.9.

```
import jwt
import requests
import base64
import json

# Step 1: Validate the signer
expected_verified_access_instance_arn = 'arn:aws:ec2:region-code:account-id:verified-access-instance/verified-access-instance-id'

encoded_jwt = headers.dict['x-amzn-ava-user-context']
jwt_headers = encoded_jwt.split('.')[0]
decoded_jwt_headers = base64.b64decode(jwt_headers)
decoded_jwt_headers = decoded_jwt_headers.decode("utf-8")
decoded_json = json.loads(decoded_jwt_headers)
received_verified_access_instance_arn = decoded_json['signer']

assert expected_verified_access_instance_arn == received_verified_access_instance_arn, "Invalid Signer"

# Step 2: Get the key id from JWT headers (the kid field)
kid = decoded_json['kid']

# Step 3: Get the public key from regional endpoint
url = 'https://public-keys.prod.verified-access.' + region + '.amazonaws.com/' + kid
req = requests.get(url)
pub_key = req.text

# Step 4: Get the payload
payload = jwt.decode(encoded_jwt, pub_key, algorithms=['ES384'])
```