SecretHash:亚马逊Cognito

时间:2016-04-29 12:48:40

标签: amazon-cognito boto3

我使用boto3连接Amazon Cognito。我试图使用sign_up方法;但是,有一个名为SecretHash的参数,我无法理解它是如何生成的。

关于SecretHash的原始文档:

  

SecretHash(string) - 密钥哈希消息认证码(HMAC)   使用用户池客户端的密钥和用户名计算   加上邮件中的客户ID。

如果我没有输入SecretHash参数,我会收到错误。

  

botocore.exceptions.ClientError:发生错误   (NotAuthorizedException)调用SignUp操作时:无法执行   验证客户端xxx的秘密哈希

4 个答案:

答案 0 :(得分:8)

不知道这是否有帮助,但是如果您使用的是JavaScript SDK,则在设置部分1中说明:

为您的用户池创建一个应用。请注意,必须取消选中生成客户端密码框,因为JavaScript SDK不支持具有客户端密钥的应用。

我在没有生成客户端密钥的情况下创建了另一个应用程序,但它确实有效。

答案 1 :(得分: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用户池的“应用客户端” - > '应用客户端ID'。 CLIENTSECRET来自AWS用户池的“应用客户端” - > 'App client secret'。

希望这有帮助

答案 2 :(得分:2)

此示例显示了如何使用hmac库在python中使用SHA256哈希算法生成HMAC。 Calculating a SHA hash with a string + secret key in python

在这种情况下,HMAC的秘密将是您的“客户秘密”。消息将是utf8字节(username + clientId)。

如果您的客户端已使用秘密生成,您只需要提供secretHash,否则可以在通话中提交秘密哈希。

另外,我建议您使用我们的客户端SDK探索Cognito UserPools:javascript,android或IOS。由于SDK会为您处理秘密哈希的生成。

答案 3 :(得分:2)

我刚刚从AWS获得了有关此问题的支持。以下是我被告知的事情:

AWS REP:让我从begnining开始

AWS REP:secretHash不是100%稳定

AWS REP:为了调用函数

AWS REP:必须省略secretHash

AWS REP:所以,你需要在没有secretHash

的情况下调用它

AWS REP:但是......

AWS REP:如果您已使用密码/安全设置配置您的应用

AWS REP:如果没有秘密哈希,cognito会不高兴

AWS REP:所以您需要使用其他应用密钥

AWS REP:没有设置就确认了

代表不确定应该使用的算法,并打开了一个案例来更新文档。