Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
L'utilisateur affirme avoir réussi et vérifié sa signature dans Verified Access
Une fois qu'une Accès vérifié par AWS instance a authentifié un utilisateur avec succès, elle envoie les demandes d'utilisateur reçues de l'IdP au point de terminaison Verified Access. Les demandes des utilisateurs sont signées afin que les applications puissent vérifier les signatures et également vérifier que les demandes ont été envoyées par Verified Access. Au cours de ce processus, l'en-tête HTTP suivant est ajouté :
x-amzn-ava-user-context
Cet en-tête contient les revendications de l'utilisateur au format JSON Web Token (JWT). Le format JWT inclut un en-tête, une charge utile et une signature qui sont encodés en URL base64. Verified Access utilise ES384 (algorithme de signature ECDSA utilisant l'algorithme de hachage SHA-384) pour générer la signature JWT.
Les applications peuvent utiliser ces allégations à des fins de personnalisation ou pour d'autres expériences spécifiques aux utilisateurs. Les développeurs d'applications doivent se renseigner sur le niveau d'unicité et de vérification de chaque réclamation fournie par le fournisseur d'identité avant utilisation. En général, la sub
réclamation est le meilleur moyen d'identifier un utilisateur donné.
Table des matières
Exemple : JWT signé pour les réclamations des utilisateurs de l'OIDC
Les exemples suivants montrent à quoi ressembleront l'en-tête et la charge utile des réclamations des utilisateurs OIDC au format JWT.
Exemple d'en-tête :
{
"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)
}
Exemple de charge utile :
{
"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"
}
}
Exemple : JWT signé pour les réclamations des utilisateurs d'IAM Identity Center
Les exemples suivants montrent à quoi ressembleront l'en-tête et la charge utile des réclamations des utilisateurs d'IAM Identity Center au format JWT.
Note
Pour IAM Identity Center, seules les informations relatives aux utilisateurs seront incluses dans les réclamations.
Exemple d'en-tête :
{
"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)
}
Exemple de charge utile :
{
"user": {
"user_id": "f478d4c8-a001-7064-6ea6-12423523",
"user_name": "test-123",
"email": {
"address": "test@amazon.com",
"verified": false
}
}
}
Clés publiques
Dans la mesure où les instances Verified Access ne chiffrent pas les demandes des utilisateurs, nous vous recommandons de configurer les points de terminaison Verified Access pour qu'ils utilisent le protocole HTTPS. Si vous configurez votre point de terminaison Verified Access pour utiliser le protocole HTTP, veillez à limiter le trafic vers le point de terminaison à l'aide de groupes de sécurité.
Pour garantir la sécurité, vous devez vérifier la signature avant de procéder à toute autorisation basée sur les réclamations, et vérifier que le signer
champ de l'en-tête JWT contient l'ARN de l'instance Verified Access attendu.
Pour obtenir la clé publique, obtenez l'ID de clé de l'en-tête JWT et utilisez-le pour rechercher la clé publique à partir du point de terminaison.
Le point final de chacun Région AWS est le suivant :
https://public-keys.prod.verified-access.<region>.amazonaws.com/<key-id>
Exemple : récupération et décodage de JWT
L'exemple de code suivant montre comment obtenir l'ID de clé, la clé publique et la charge utile dans 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'])