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
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.
Indice
Esempio: dichiarazioni utente firmate JWT for OIDC
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
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
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 dichiarazioni 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
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'])