2016-04-29 11 views
2

私はAmazon Cognitoを接続するためにboto3を使用しています。私はsign_upメソッドを使用しようとしています。しかし、それがどのように生成されるのか分からないSecretHashというパラメータがあります。SecretHash:Amazon Cognito

SecretHashについて、元のドキュメント:

SecretHash (string) -- A keyed-hash message authentication code (HMAC) calculated using the secret key of a user pool client and username plus the client ID in the message.

私はSecretHashパラメータを入れていない場合、私は、以下のエラーを取得しています。この場合に役立ちます

botocore.exceptions.ClientError: An error occurred (NotAuthorizedException) when calling the SignUp operation: Unable to verify secret hash for client xxx

答えて

8

が分からないのですが、あなたにはJavaScript SDKを使用している場合、セットアップパート1で、それは述べて:

は、ユーザーのプールのためのアプリケーションを作成します。 JavaScript SDKはクライアントシークレットを持つアプリケーションをサポートしていないため、クライアントの生成秘密ボックスはチェックされていない必要があります。

私はクライアントの秘密鍵を生成せずに別のアプリケーションを作成していました。

2

この例は、hmacライブラリを使用してPythonでSHA256ハッシュアルゴリズムを使用してHMACを生成する方法を示しています。 Calculating a SHA hash with a string + secret key in python

この場合、HMACの秘密はあなたの「クライアントの秘密」になります。メッセージはutf8バイト(username + clientId)になります。

シークレットハッシュをコールでコミットする必要がある場合は、シークレットハッシュをコミットすることができます。

また、Cognito UserPoolsをクライアント側のSDK(javascript、android、IOS)で探ることをおすすめします。 SDKがあなたの秘密ハッシュの生成を処理するので。

+0

と同じエラーが発生します。 – cagatayodabasi

+0

"Generate client secret"チェックボックスをオフにして、秘密を必要としない新しいアプリケーションクライアントを生成する必要があります。次に、新しいクライアントに対してこのパラメータを省略できます。 –

2

この質問に関するAWSのサポートを終了しました。

AWS REP:secretHashは100%安定

AWS REPではありません:

機能を呼び出すために私はbegnining

AWS REPから始めましょうここに私が言われたものです

AWS REP:そう、あなたがAWS REP

secretHash

せずにそれを呼び出す必要があります:secretHashはAWS REPが

をommitedする必要がありますが.....

AWS REP:あなたは

AWS REPを設定する秘密/セキュリティを使用してアプリケーションを設定している場合:秘密ハッシュ

AWS REPがない場合cognitoは幸せではありません:あなたは別のを使用する必要がありますアプリキー

AWS REP:それは

担当者が使用すべきであるとドキュメントが更新されますするケースを開いたアルゴリズムについて確認されませんでしたを設定せずにconfiuredました。

3

私のために、次の作品は:

import hmac 
import hashlib 
import base64 

def signup(username, password, email, phone): 
    msg=username + CLIENTID 
    dig = hmac.new(str(CLIENTSECRET).encode('utf-8'), 
    msg=str(msg).encode('utf-8'), digestmod=hashlib.sha256).digest() 
    d2 = base64.b64encode(dig).decode() 
    dig = d2 
    resp = pool.sign_up(
    ClientId=CLIENTID, 
    SecretHash=str(dig), 
    Username=username, 
    Password=password, 
    UserAttributes=[ 
      { 'Name': 'email', 'Value': email}, 
      { 'Name': 'phone_number', 'Value': phone} 
    ]) 

これは秘密とメッセージ部分への入力のすべての順列を試した後でした。 CLIENTIDはAWS User PoolsのAppクライアント - > 'App client id'のものです。 CLIENTSECRETはAWS User PoolsのApp client - > 'App client secret'からのものです。

私がこのパラメータを送信しないことで省略しようとすると、