什么是 Cognito 应用程序客户端密钥?

What is a Cognito App Client Secret

documentations 处有一个 App Client Secret,但我找不到它的用途。

我看到javascript SDK 没有使用它,我也不知道为什么,可能是因为许多javascript 应用程序运行 在用户浏览器上,而不是一个地方揭露一个秘密,但那是我的疯狂猜测。

如果这类似于 App Client ID 的密码,我看不出这会如何提高安全性,因为可以窃取您的 App Client ID 将能够窃取 [=10= 】 还有。此外,App Client ID 是相当随机的,应该为暴力攻击提供足够的安全性。

我想知道这个秘密的目的是什么,cognito 如何使用它以及它提供什么功能。

是的,你是对的。它有点像密码。至于为什么使用它,这不是 Cognito 特定的 属性,而是 OAuth2 标准的一部分。事实上,在浏览器上 public apps 运行 中使用 app secret 是没有意义的。通常,在开发 public 应用程序时,不会使用客户端密码。如果这样做,您有责任安全地存储它。

来到 Cognito,就像你说的,它的 JS SDK 不使用客户端密码(它应该是)。但是,如果您使用 AWS CLI 或 boto3,则可以使用客户端密钥。在这种情况下,如果您的应用程序客户端有一个秘密,您应该使用这个秘密和一些其他参数(用户名 + clientid 我认为)计算哈希并将其作为参数传递。

但就安全性而言,这并没有什么不同。

App Client IDApp Client Secret 在您使用机器对机器通信时是必需的,在这种通信中您没有用户和密码。有一个授权类型:Client Credentials。要更好地理解这一点,您可以查看 https://auth0.com/docs/api-auth/which-oauth-flow-to-use