【问题标题】:What is a Cognito App Client Secret什么是 Cognito 应用程序客户端密码
【发布时间】:2023-03-05 23:39:01
【问题描述】:

documentations 有一个App Client Secret,但我在任何地方都找不到它的用途。

我看到javascript SDK不使用它,我也不知道为什么,可能是因为许多javascript应用程序运行在用户浏览器上,不是暴露秘密的地方,但这是我的猜测。

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

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

【问题讨论】:

  • 这基本上是您的应用程序用来对其 API 进行身份验证的密码。
  • 我是这么认为的....但是是不是有点多余?用户池 id 是相当随机的,如果有人可以从您的应用程序中提取用户池 id,他们也将能够提取应用程序秘密,那么,有什么优势呢?只是为了让它看起来更安全?
  • 不确定,我不熟悉 aws-cognito,但也许 ID 在某些时候会暴露给用户,而秘密却没有。
  • (澄清一下,我指的是客户端应用程序 ID,而不是用户池 ID)

标签: aws-cognito


【解决方案1】:

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

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

但在安全性方面,它并没有真正的区别。

【讨论】:

  • 很高兴知道这不仅仅是对我没有意义的事情。但是,我仍然不明白为什么要禁止在公共应用程序中使用应用程序机密。它肯定不会提供任何额外的安全性,而且,如果秘密被泄露,它也不会是任何安全漏洞,没有副作用,至少据我所知。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-20
    • 2020-10-23
    • 2020-04-19
    • 2013-12-31
    • 2017-07-06
    • 2019-06-11
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多