Cómo utilizar la integración de getToken - AWS WAF, AWS Firewall Manager, AWS Shield Advanced y director de seguridad de red AWS Shield

Presentamos una nueva experiencia de consola para AWS WAF

Ahora puede usar la experiencia actualizada para acceder a las funciones de AWS WAF desde cualquier parte de la consola. Para obtener más información, consulta Trabajo con la experiencia de consola actualizada.

Cómo utilizar la integración de getToken

En esta sección, se explica cómo usar la operación getToken.

AWS WAF requiere que sus solicitudes a los puntos de conexión protegidos incluyan la cookie denominada aws-waf-token con el valor de su token actual.

La operación de getToken es una llamada a la API asíncrona que recupera el token de AWS WAF y lo almacena en una cookie en la página actual con el nombre aws-waf-token, y el valor establecido al valor del token. Puede usar esta cookie de token en su página según sea necesario.

Cuando se llama a getToken, hace lo siguiente:

  • Si un token vigente ya está disponible, la llamada lo devuelve inmediatamente.

  • De lo contrario, la llamada recupera un nuevo token del proveedor de tokens y espera hasta 2 segundos a que se complete el flujo de trabajo de adquisición del token antes de que se agote el tiempo de espera. Si se agota el tiempo de espera de la operación, se generará un error que deberá gestionar su código de llamada.

La operación getToken viene acompañada de una operación hasToken que indica si la cookie aws-waf-token contiene actualmente un token que no ha caducado.

AwsWafIntegration.getToken() recupera un token válido y lo almacena como una cookie. La mayoría de las llamadas de los clientes adjuntan automáticamente esta cookie, pero algunas no. Por ejemplo, las llamadas realizadas entre dominios host no adjuntan la cookie. En los detalles de implementación que aparecen a continuación, mostramos cómo trabajar con ambos tipos de llamadas de clientes.

Implementación getToken básica para llamadas que adjuntan la cookie aws-waf-token

La siguiente lista de ejemplos muestra el código estándar para implementar la operación getToken con una solicitud de inicio de sesión.

const login_response = await AwsWafIntegration.getToken() .catch(e => { // Implement error handling logic for your use case }) // The getToken call returns the token, and doesn't typically require special handling .then(token => { return loginToMyPage() }) async function loginToMyPage() { // Your existing login code }
Envío del formulario solo después de que el token esté disponible en getToken

La siguiente lista muestra cómo registrar un oyente de eventos para interceptar los envíos de formularios hasta que haya un token válido disponible para su uso.

<body> <h1>Login</h1> <p></p> <form id="login-form" action="/web/login" method="POST" enctype="application/x-www-form-urlencoded"> <label for="input_username">USERNAME</label> <input type="text" name="input_username" id="input_username"><br> <label for="input_password">PASSWORD</label> <input type="password" name="input_password" id="input_password"><br> <button type="submit">Submit<button> </form> <script> const form = document.querySelector("#login-form"); // Register an event listener to intercept form submissions form.addEventListener("submit", (e) => { // Submit the form only after a token is available if (!AwsWafIntegration.hasToken()) { e.preventDefault(); AwsWafIntegration.getToken().then(() => { e.target.submit(); }, (reason) => { console.log("Error:"+reason) }); } }); </script> </body>
Cómo adjuntar el token cuando el cliente no adjunta la cookie aws-waf-token de forma predeterminada

AwsWafIntegration.getToken() recupera un token válido y lo almacena como una cookie, pero no todas las llamadas de los clientes adjuntan esta cookie de forma predeterminada. Por ejemplo, las llamadas realizadas entre dominios host no adjuntan la cookie.

El contenedor fetch maneja estos casos automáticamente, pero, si no puede usar el contenedor fetch, puede manejarlo usando un encabezado x-aws-waf-token personalizado. AWS WAF lee los tókenes desde este encabezado, además de leerlos desde la cookie aws-waf-token. En el siguiente código, se muestra un ejemplo de cómo configurar el encabezado.

const token = await AwsWafIntegration.getToken(); const result = await fetch('/url', { headers: { 'x-aws-waf-token': token, }, });

De forma predeterminada, AWS WAF solo acepta los tókenes que contienen el mismo dominio que el dominio host solicitado. Cualquier token que abarque varios dominios requiere las entradas correspondientes en la lista de dominios del token de paquete de protección (ACL web). Para obtener más información, consulte Configuración de la lista de dominios de tokens del paquete de protección (ACL web) de AWS WAF.

Para obtener información adicional sobre el uso de los tókenes que abarcan varios dominios, consulte aws-samples/aws-waf-bot-control-api-protection-with-captcha.