Como soluciono erros “Unable to verify secret hash for client<client-id>” da minha API de grupos de usuários do Amazon Cognito?

3 minuto de leitura
0

Quando tento invocar minha API de grupos de usuários do Amazon Cognito, recebo o erro “Unable to verify secret hash for client<client-id>”. Como resolvo o erro?

Breve descrição

Quando um cliente de aplicação de grupo de usuários é configurado com um segredo de cliente no grupo de usuários, um valor SecretHash é necessário no argumento de consulta da API. Se um hash de segredo não for fornecido no argumento de consulta da API, o Amazon Cognito retornará um erro Unable to verify secret hash for client <client-id>.

O exemplo a seguir mostra como criar um valor de SecretHash e incluí-lo em uma chamada de API InitiateAuth ou ForgotPassword.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando a versão mais recente da AWS CLI.

Para criar um valor de SecretHash

Siga as instruções em Computar valores de hash de segredo. Você precisará do ID do cliente da aplicação, do segredo do cliente da aplicação e do nome do usuário no grupo de usuários do Amazon Cognito.

-ou-

Para automatizar o processo, faça o seguinte:

1.    Se ainda não fez isso, instale o Python.

2.    Salve o seguinte exemplo de script Python como um arquivo .py:

import sys
import hmac, hashlib, base64

username = sys.argv[1]
app_client_id = sys.argv[2]
key = sys.argv[3]
message = bytes(sys.argv[1]+sys.argv[2],'utf-8')
key = bytes(sys.argv[3],'utf-8')
secret_hash = base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode()

print("SECRET HASH:",secret_hash)

Observação: substitua os valores a seguir antes de executar o script de exemplo: Em username, insira o nome do usuário do grupo de usuários. Em app_client_id, insira o ID do cliente da aplicação do grupo de usuários. Em key, insira o segredo do cliente da aplicação.

3.    Execute o comando a seguir para executar o script:

python3 secret_hash.py <username> <app_client_id> <app_client_secret>

Observação: substitua os valores a seguir antes de executar o comando: Se você estiver executando uma versão do Python anterior a 3.0, substitua python3 por python. Em secret_hash.py, insira o nome do arquivo do script de exemplo. Em username, insira o nome de usuário do grupo de usuários. Em app_client_id, insira o ID do cliente da aplicação. Em app_client_secret, insira o segredo do cliente da aplicação.

A resposta do comando retorna um valor SecretHash.

Para incluir valores de SecretHash em chamadas de API

Observação: um valor de SecretHash não será necessário nas chamadas de API do Amazon Cognito se o cliente da aplicação não estiver configurado com um segredo de cliente da aplicação. Para obter mais informações, consulte Configuring a user pool app client.

Adicione o valor de SecretHash que você criou como um parâmetro SECRET_HASH nos parâmetros da string de consulta da chamada de API.

Exemplo de chamada de API InitiateAuth que inclui um parâmetro SECRET_HASH

$ aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=<username>,PASSWORD=<password>,SECRET_HASH=<secret_hash> --client-id <client-id>

Exemplo de resposta da chamada de API InitiateAuth

{
    "ChallengeParameters": {},

    "AuthenticationResult": {
        "AccessToken": "<HIDDEN>",
        "ExpiresIn": 3600,
        "TokenType":
    "Bearer",

        "RefreshToken": "<HIDDEN>",
        "IdToken": "<HIDDEN>"
    }
}

Observação: se estiver usando o fluxo de autenticação USER_PASSWORD_AUTH, certifique-se de que ALLOW_USER_PASSWORD_AUTH esteja ativado.

Exemplo de chamada de API ForgotPassword que inclui um parâmetro SECRET_HASH

$ aws cognito-idp forgot-password --client-id <client-id> --username <username> --secret-hash <secret-hash>

Exemplo de resposta de chamada da API ForgotPassword

{
    "CodeDeliveryDetails": {
        "Destination": "+***********",
        "DeliveryMedium": "SMS",
        "AttributeName": "phone_number"
    }
}

AWS OFICIAL
AWS OFICIALAtualizada há 3 anos