Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Transferencia de las notificaciones de usuario y verificación de firmas en Acceso verificado
Una vez que una Acceso verificado de AWS instancia autentica a un usuario correctamente, envía las reclamaciones del usuario recibidas del IdP al punto final de Verified Access. Las notificaciones de usuario se firman para que las aplicaciones puedan verificar las firmas y confirmar que las notificaciones fueron enviadas por Acceso verificado. Durante este proceso, se agrega el siguiente encabezado HTTP:
x-amzn-ava-user-context
Este encabezado contiene las notificaciones de los usuarios en formato de token web JSON (JWT). El formato JWT incluye un encabezado, una carga y una firma que tienen codificación de URL en base64. Verified Access utiliza ES384 (el algoritmo de firma ECDSA que utiliza el algoritmo de hash SHA-384) para generar la firma JWT.
Las aplicaciones pueden usar estas notificaciones para personalizar o para realizar otras experiencias específicas del usuario. Los desarrolladores de aplicaciones deben informarse sobre el nivel de exclusividad y verificación de cada notificación proporcionada por el proveedor de identidad antes de utilizarla. En general, la reclamación sub
es la mejor forma de identificar a un usuario determinado.
Contenido
Ejemplo: JWT firmado para las notificaciones de usuarios de OIDC
Los siguientes ejemplos muestran el aspecto que tendrán el encabezado y la carga útil de las notificaciones de los usuarios de OIDC en el formato JWT.
Encabezado de ejemplo:
{
"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)
}
Ejemplo de carga:
{
"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"
}
}
Ejemplo: JWT firmado para las notificaciones de los usuarios de IAM Identity Center
Los siguientes ejemplos muestran el aspecto que tendrán el encabezado y la carga útil de las notificaciones de los usuarios de IAM Identity Center en el formato JWT.
nota
En el caso de IAM Identity Center, en las notificaciones solo se incluirá la información del usuario.
Encabezado de ejemplo:
{
"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)
}
Ejemplo de carga:
{
"user": {
"user_id": "f478d4c8-a001-7064-6ea6-12423523",
"user_name": "test-123",
"email": {
"address": "test@amazon.com",
"verified": false
}
}
}
Claves públicas
Como las instancias de Acceso verificado no cifran las notificaciones de los usuarios, le recomendamos que configure los puntos de conexión de Acceso verificado para que usen HTTPS. Si configura el punto de conexión de Acceso verificado para que utilice HTTP, asegúrese de restringir el tráfico al punto de conexión mediante grupos de seguridad.
Para garantizar la seguridad, debe verificar la firma antes de realizar cualquier autorización basada en las notificaciones y validar que el campo signer
del encabezado JWT contenga el ARN esperado de la instancia de Acceso verificado.
Para obtener la clave pública, obtenga el ID de clave del encabezado JWT y utilícelo para buscar la clave pública desde el siguiente punto de conexión regional.
El punto final de cada uno es el siguiente: Región de AWS
https://public-keys.prod.verified-access.<region>.amazonaws.com/<key-id>
Ejemplo: recuperación y decodificación de JWT
El siguiente ejemplo de código muestra cómo obtener la identificación de clave, la clave pública y la carga en 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'])