我使用boto3连接Amazon Cognito。我试图使用sign_up方法;但是,有一个名为SecretHash的参数,我无法理解它是如何生成的。
关于SecretHash的原始文档:
SecretHash(string) - 密钥哈希消息认证码(HMAC) 使用用户池客户端的密钥和用户名计算 加上邮件中的客户ID。
如果我没有输入SecretHash参数,我会收到错误。
botocore.exceptions.ClientError:发生错误 (NotAuthorizedException)调用SignUp操作时:无法执行 验证客户端xxx的秘密哈希
答案 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:没有设置就确认了
代表不确定应该使用的算法,并打开了一个案例来更新文档。