【问题标题】:Is AWS cognito client side authentication secureAWS cognito 客户端身份验证是否安全
【发布时间】:2021-05-05 11:49:21
【问题描述】:

我在我的应用程序中使用 AWS Cognito 进行身份验证。 Cognito 提供完全的客户端身份验证。但是,我们需要将凭据存储在可从浏览器访问的 .env 文件中。

如果我正在构建企业应用程序并且安全性对我很重要,那么使用 AWS Cognito 进行身份验证是否安全?

【问题讨论】:

    标签: authentication amazon-cognito


    【解决方案1】:

    对于 AWS cognito,身份验证发生在服务器端。不在客户端。在客户端,我们正在为用户创建通过其凭证登录的机会,然后凭证将被发送到 AWS Cognito 进行身份验证。这会导致接受或拒绝。

    【讨论】:

      【解决方案2】:

      Cognito 本身是一种服务,您可以在其上构建安全的身份基础 - 但不是您提议的方式。

      将静态凭据存储到 3rd 方 API 可以被(未经)身份验证的用户轻松访问的地方是一种糟糕的安全做法

      Cognito 的安全性不是您最大的问题,我的建议是首先为您的静态凭据找到更好的解决方案。有时无法避免 API 密钥等静态凭据,但您不应该将它们暴露给最终用户。将它们存储在 AWS Secrets Manager 或 Systems Manager Parameter Store 中,并在需要时检索它们。尽可能仅将它们存储在内存中,并且永远不要将它们发送给您的客户。

      【讨论】:

      • 但是,互联网和 YouTube 上的方式和所有教程都对 Cognito 使用相同的方法。他们要么将密钥 直接放入源代码或env 文件(例如React)。任何最终用户都可以访问它们。
      • 在任何时候,我们都不应该将secret keys 带给最终用户。通过使用这些密钥,任何用户都可以登录系统。
      • 我不能谈论所有这些教程的创建者,但您可以安全地做到这一点,即您将未经身份验证的用户重定向到 Cognito UI,然后他们可以登录并接收签名的 JSON Web 令牌,然后他们可以将调用传递给 API 网关或类似的东西来验证自己。客户端需要的所有信息都是 Cognito 中应用程序客户端的客户端 ID 以及用户池 ID,这两者都不是秘密。
      • 在代码中存储客户端凭据是您可以为快速演示执行的操作,但不能在生产环境中执行。
      猜你喜欢
      • 2018-06-03
      • 2017-01-02
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 2020-07-04
      • 2013-08-19
      • 2019-04-07
      相关资源
      最近更新 更多