L'utente dichiara il superamento e la verifica della firma in Verified Access - AWS Accesso verificato

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 un Accesso verificato da AWS l'istanza autentica un utente con successo, 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 anche verificare che le attestazioni siano state inviate da Verified Access. Durante questo processo, viene aggiunta la seguente HTTP intestazione:

x-amzn-ava-user-context

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

Le applicazioni possono utilizzare queste attestazioni 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'subaffermazione è il modo migliore per identificare un determinato utente.

Esempio: Firmato JWT per le rivendicazioni OIDC degli utenti

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

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" ] }

Esempio: reclami utente firmati JWT per IAM Identity Center

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

Nota

Per IAM Identity Center, nelle rivendicazioni 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 da utilizzare. HTTPS Se configuri l'endpoint Verified Access per l'utilizzoHTTP, assicurati di limitare il traffico verso l'endpoint utilizzando i gruppi di sicurezza.

Per garantire la sicurezza, devi verificare la firma prima di effettuare qualsiasi autorizzazione in base alle affermazioni e verificare che il signer campo nell'JWTintestazione contenga l'istanza di accesso verificato prevista. ARN

Per ottenere la chiave pubblica, recupera l'ID della chiave dall'JWTintestazione e usalo per cercare la chiave pubblica dall'endpoint.

L'endpoint per ciascuno Regione AWS è il seguente:

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

Esempio: recupero e decodifica 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'])