Como usar a integração getToken
Esta seção explica como usar a operação getToken
.
O AWS WAF exige que suas solicitações para endpoints protegidos incluam o cookie denominado aws-waf-token
com o valor do seu token atual.
A operação getToken
é uma chamada de API assíncrona que recupera o token do AWS WAF e o armazena em um cookie na página atual com o nome aws-waf-token
e o valor definido como o valor do token. Você pode usar esse cookie de token conforme necessário em sua página.
Quando você chama getToken
, ele faz o seguinte:
-
Se um token não expirado já estiver disponível, a chamada o retornará imediatamente.
-
Caso contrário, a chamada recuperará um novo token do provedor do token, aguardando até 2 segundos para que o fluxo de trabalho de aquisição do token seja concluído antes do tempo limite. Se a operação atingir o tempo limite, ela gerará um erro, que seu código de chamada deve processar.
A operação getToken
tem uma operação hasToken
complementar, que indica se o cookie aws-waf-token
atualmente contém um token não expirado.
AwsWafIntegration.getToken()
recupera um token válido e o armazena como um cookie. A maioria das chamadas de clientes anexa automaticamente esse cookie, mas algumas não. Por exemplo, chamadas feitas em domínios de host não anexam o cookie. Nos detalhes de implementação a seguir, mostramos como trabalhar com os dois tipos de chamadas de clientes.
Implementação básica de getToken
, para chamadas que anexam o cookie aws-waf-token
A lista de exemplo a seguir mostra o código padrão para implementar a operação getToken
com uma solicitação de login.
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 }
Envie o formulário somente após o token estar disponível em getToken
A lista a seguir mostra como registrar um receptor de eventos para interceptar envios de formulários até que um token válido esteja disponível para 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>
Como anexar o token quando seu cliente não anexa o cookie aws-waf-token
por padrão
AwsWafIntegration.getToken()
recupera um token válido e o armazena como um cookie, mas nem todas as chamadas de clientes anexam esse cookie por padrão. Por exemplo, chamadas feitas em domínios de host não anexam o cookie.
O wrapper fetch
trata esses casos automaticamente, mas se você não conseguir usar o wrapper fetch
, poderá lidar com isso usando um cabeçalho personalizado x-aws-waf-token
. O AWS WAF lê os tokens desse cabeçalho, além de lê-los do cookie aws-waf-token
. O código a seguir mostra um exemplo de configuração do cabeçalho.
const token = await AwsWafIntegration.getToken(); const result = await fetch('/url', { headers: { 'x-aws-waf-token': token, }, });
Por padrão, o AWS WAF só aceita tokens que contenham o mesmo domínio do domínio host solicitado. Todos os tokens entre domínios exigem entradas correspondentes na lista de domínios de tokens da ACL da Web. Para ter mais informações, consulte Configuração da lista de domínios de tokens da ACL da Web no AWS WAF.
Para obter informações adicionais sobre o uso de tokens entre domínios, consulte aws-samples/aws-waf-bot-control-api-protection-with-captcha