【问题标题】:Sanity check: OAuth 2 client_credential server-to-server vs. username/pwd健全性检查:OAuth2 客户端凭据服务器到服务器和。用户名/密码
【发布时间】:2021-08-16 02:18:39
【问题描述】:

我们正在就以下问题进行内部辩论。我们有一个服务器,它实现了我们客户的服务器使用/调用的 API。我们的服务器正在使用 AWS Cognito。我们已经实现了 client_credential 身份验证。因此,当我们加入新客户端时,我们会为他们注册一个新应用程序(在 Cognito/UserPool 中),并为他们提供相应的应用程序 ID 和应用程序密码(由 Cognito 创建)。我们还设置了范围等。所以现在,当客户的服务器进行 API 调用时,它 1) 使用应用程序 ID 和密码从 Cognito 获取身份验证令牌,以及 2) 通过 API 调用传入令牌。

一位工程师认为我们不应该相信我们的客户会保护应用程序的机密。相反,他建议我们保留应用 ID 和机密。然后,我们给我们的新客户一个用户名/密码。当客户的服务器进行 API 调用时,客户的服务器将 1)将用户名/密码与 API 调用一起发送,2)我们的服务器验证这些,3)拉取从内部数据库中取出客户的应用程序 ID 和密码,然后 4) 将这些传递给 Cognito 以获取身份验证令牌。

呸!这在几个方面似乎是个问题:

  1. 如果我们不信任他们的应用机密,为什么要信任他们我们为他们创建的用户名/密码?
  2. 建议的替代方案(用户名/密码)引入了另一个层。现在我们需要管理用户名和密码,存储它等等。
  3. 现有实现 (OAuth 2) 已经成熟、经过测试等。

我对 OpenAuth 的做事方式相当陌生,所以在告诉工程师之前,我想问问您的想法,“感谢您的意见,但我们不打算介绍用户名/密码;相反,我们'将信任我们的客户来保护应用程序的秘密。”

想法? TIA。

【问题讨论】:

    标签: oauth-2.0 amazon-cognito


    【解决方案1】:

    当您添加另一层用户名/密码时,唯一会发生变化的是,当密码被泄露时,您只需在系统中更改密码,而不是在 Cognito 中。

    如果您想让您的客户能够自行更改或重置他们的密码,并且您不想让他们访问 Cognito(通过 GUI 或通过由你)。否则,拥有第二层用户名/密码完全没有额外的价值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多