El usuario solicita el pase y la verificación de la firma en Verified Access - AWS Acceso verificado

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.

El usuario solicita el pase y la verificación de la firma en Verified Access

Después de un Acceso verificado de AWS la instancia autentica a un usuario correctamente y envía las reclamaciones del usuario recibidas del IdP al punto final de Verified Access. Las solicitudes de los usuarios se firman para que las aplicaciones puedan verificarlas y también comprobar que Verified Access las envió. Durante este proceso, se agrega el siguiente HTTP encabezado:

x-amzn-ava-user-context

Este encabezado contiene las declaraciones de los usuarios en formato JSON web token (JWT). El JWT formato incluye un encabezado, una carga útil y una firma codificados en base64URL. Verified Access utiliza ES384 (un algoritmo de ECDSA firma que utiliza un 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.

Ejemplo: firmado JWT para las reclamaciones de los OIDC usuarios

Los siguientes ejemplos muestran el aspecto que tendrán el encabezado y la carga útil OIDC de las reclamaciones de los usuarios en este JWT formato.

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

Ejemplo: firmado JWT para las reclamaciones de los usuarios de IAM Identity Center

Los siguientes ejemplos muestran el aspecto que tendrán el encabezado y la carga útil de las reclamaciones de los usuarios de IAM Identity Center en este JWT formato.

nota

En el IAM caso de Identity Center, en las reclamaciones 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 Verified Access no cifran las solicitudes de los usuarios, le recomendamos que configure los puntos finales de Verified Access para utilizarlos. HTTPS Si configura su terminal de Verified Access para su usoHTTP, asegúrese de restringir el tráfico al punto final mediante grupos de seguridad.

Para garantizar la seguridad, debe verificar la firma antes de realizar cualquier autorización basada en las afirmaciones y validar que el signer campo del JWT encabezado contenga la instancia de acceso verificado previstaARN.

Para obtener la clave pública, obtenga el ID de la clave del JWT encabezado y utilícelo para buscar la clave pública en el punto final.

El punto final de cada Región de AWS es el siguiente:

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

Ejemplo: recuperación y decodificación 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'])