如何解决 AWS Cognito SDK 错误:“客户端 <XYZ> 配置为机密,但未收到机密?”

问题描述 投票:0回答:5

我问这个问题是因为我很惊讶我从谷歌搜索中找到的信息如此之少。然而,我能够找到我认为的根本原因。我会将其作为答案分享,看看是否有人能够详细说明或提供更好的解释。 因此,澄清一下,我正在使用适用于 Cognito 的 AWS JavaScript SDK。当我尝试一些标准用例时,我收到以下错误:

客户端配置了机密,但未收到机密

我可以采取什么步骤来解决这个问题?

javascript amazon-cognito
5个回答
18
投票
应用程序客户端

。创建一个新的 App Clients 并取消选中生成客户端密钥。在我的代码中一切都按预期工作。


8
投票
Amazon Cognito

的 NPM 包,我注意到:

创建应用程序时,必须取消选中生成客户端密钥框,因为 JavaScript SDK 不支持具有客户端密钥的应用程序。

检查我的应用程序,我发现它有一个客户端密钥。我将尝试在没有秘密的情况下重新制作应用程序,看看是否可以解决问题。


7
投票

https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash

以下示例展示了如何使用具有客户端 ID 和客户端密钥的客户端使用 Python 登录用户:

import json import requests import hmac import hashlib import base64 client_id = "" client_secret = "" cognito_url = "" username = "" password = "" secret_hash = base64.b64encode(hmac.new(bytes(client_secret, 'utf-8'), bytes( username + client_id, 'utf-8'), digestmod=hashlib.sha256).digest()).decode() reqData = { "AuthParameters": { "USERNAME": username, "PASSWORD": password, "SECRET_HASH": secret_hash }, "AuthFlow": "USER_PASSWORD_AUTH", "ClientId": client_id } headers = { "X-Amz-Target": 'AWSCognitoIdentityProviderService.InitiateAuth', "Content-Type": 'application/x-amz-json-1.1' } jsonResponse = requests.post( url=cognito_url, data=json.dumps(reqData), headers=headers).json() print(jsonResponse)



5
投票


0
投票
Mackie Messer

正确地指出 Cognito 的 Javascript SDK 不支持具有客户端密钥的应用程序。我遇到了同样的问题,但对于那些对此感兴趣的人来说,原因是...... 在AWS Cognito的上下文中,“客户端密钥”通常用于服务器端身份验证,以证明发出请求的客户端的身份。它被视为敏感信息,应予以保密。

对于客户端应用程序,尤其是那些在使用 JavaScript 的 Web 浏览器中运行的应用程序,通常不建议直接在应用程序中使用客户端密钥。 JavaScript 代码本质上对用户是可见的,并且在客户端代码中嵌入客户端机密可能会将其暴露给任何碰巧正在查看的人。

Cognito 的 JavaScript SDK 允许在客户端处理身份验证,而无需客户端密钥。相反,身份验证通常基于令牌,例如 ID 令牌和访问令牌,这些令牌是在身份验证过程中安全获取的。

© www.soinside.com 2019 - 2024. All rights reserved.