186 votes

Impossible de vérifier le hachage secret pour le client dans les pools d'utilisateurs Amazon Cognito

Je suis bloqué dans le processus "Groupes d'utilisateurs Amazon Cognito Identity".

J'ai essayé tous les codes possibles pour authentifier l'utilisateur dans les groupes d'utilisateurs cognito. Mais je reçois toujours une erreur disant "Erreur: Impossible de vérifier le hachage secret pour le client 4b ******* fd".

Voici le code:

 AWS.config.region = 'us-east-1'; // Region
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:b64bb629-ec73-4569-91eb-0d950f854f4f'
});

AWSCognito.config.region = 'us-east-1';
AWSCognito.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:b6b629-er73-9969-91eb-0dfffff445d'
});

AWSCognito.config.update({accessKeyId: 'AKIAJNYLRONAKTKBXGMWA', secretAccessKey: 'PITHVAS5/UBADLU/dHITesd7ilsBCm'})

var poolData = { 
    UserPoolId : 'us-east-1_l2arPB10',
    ClientId : '4bmsrr65ah3oas5d4sd54st11k'
};
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);

var userData = {
     Username : 'ronakpatel@gmail.com',
     Pool : userPool
};

var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);

cognitoUser.confirmRegistration('123456', true,function(err, result) {
if (err) {
    alert(err);
    return;
}
console.log('call result: ' + result);
});
 

229voto

thomas.g Points 560

Il semble qu'actuellement AWS Cognito ne gère pas parfaitement le secret du client. Cela fonctionnera dans un avenir proche, mais pour l’instant, il s’agit toujours d’une version bêta.

Pour moi, cela fonctionne bien pour une application sans secret client mais échoue pour une application avec un secret client.

Dans votre groupe d'utilisateurs, essayez de créer une nouvelle application sans générer de secret client. Ensuite, utilisez cette application pour inscrire un nouvel utilisateur ou pour confirmer l'inscription.

88voto

Dr Douglas GhD Points 591

Selon les documents: http://docs.aws.amazon.com/cognito/latest/developerguide/setting-up-the-javascript-sdk.html

Le SDK Javascript ne prend pas en charge les applications avec un secret client.

Les instructions indiquent maintenant que vous devez décocher "Générer le secret du client" lors de la création de l'application pour le groupe d'utilisateurs.

15voto

Molezz Points 141

Pour quiconque s'intéresse à l'utilisation d'AWS Lambda inscrire un utilisateur à l'aide de l'AWS JS SDK, ce sont les étapes que j'ai fait:

Créer une autre fonction lambda en python pour générer la clé:

import hashlib
import hmac
import base64

secretKey = "key"
clientId = "clientid"
digest = hmac.new(secretKey,
                  msg=username + clientId,
                  digestmod=hashlib.sha256
                 ).digest()
signature = base64.b64encode(digest).decode()

Appel de la fonction par l'nodeJS fonction AWS. La signature a agi comme le secret de hachage pour Cognito

Remarque: La réponse est fortement basée George Campbell réponse dans le lien suivant: Calcul d'un hash SHA avec une chaîne + clé secrète en python

13voto

syvex Points 2244

Solution pour golang . On dirait que cela devrait être ajouté au SDK.

 import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/base64"
)

func SecretHash(username, clientID, clientSecret string) string {
    mac := hmac.New(sha256.New, []byte(clientSecret))
    mac.Write([]byte(username + ClientID))
    return base64.StdEncoding.EncodeToString(mac.Sum(nil))
}
 

8voto

gandrademello Points 56

En Java, vous pouvez utiliser ce code:

 private String getSecretHash(String email, String appClientId, String appSecretKey) throws Exception {
    byte[] data = (email + appClientId).getBytes("UTF-8");
    byte[] key = appSecretKey.getBytes("UTF-8");

    return Base64.encodeAsString(HmacSHA256(data, key));
}

static byte[] HmacSHA256(byte[] data, byte[] key) throws Exception {
    String algorithm = "HmacSHA256";
    Mac mac = Mac.getInstance(algorithm);
    mac.init(new SecretKeySpec(key, algorithm));
    return mac.doFinal(data);
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X