与 OAuth 相比,非常简单的身份验证 API 是否存在安全问题?

Is a very simple authentication API a security issue compared to OAuth?

两家公司。

  1. MegaSocialPlatform
  2. 公司

这些公司彼此之间建立了信任关系。

CorporateCompany 希望他们的员工可以在 MegaSocialPlatform 上重复使用他们当前 CorporateCompany.com 的登录凭据,这样他们的员工就不会必须重新创建一个帐户。

CorporateCompany 的开发能力有限,而且他们没有实施任何成熟的 OAuth 服务。

如果他们制作一个 API 就足够了,你可以 post 一个电子邮件/密码组合,如果它是正确的 returns 一些 JSON CorporatyCompany 的唯一 ID、电子邮件和名称在哪?

此 ID 可用于在 MegaSocialPlatform 和 link MegaSocialPlatform ID 上对用户进行身份验证。

当然,防止黑客尝试超过 20 个密码等经典系统仍然存在。

会不会有什么安全问题?还可能出现什么其他问题?

如果双方同意也可以这样实现,但缺点是:

  • MegaSocialPlatform 会 "see" 每个用户的 CorporateCompany 凭据,因此 CorporateCompany 必须高度信任 MegaSocialPlatform,不会存储或滥用其用户的凭据 - 避免这种情况正是OAuth

  • 的目的
  • 用户不会体验单点登录,但他们在使用 MegaSocialPlatform 时必须一遍又一遍地输入他们的凭据,并且跨不同的平台(例如浏览器和本机应用程序)

  • 双方需要就 JSON 对象中用户信息的表示达成一致——使用 OpenID Connect 等标准(在很大程度上)避免了这些成对协议)

请注意,CorporateCompany 不必从头开始构建 OAuth 服务器,他们可以只使用现有的实现并根据需要进行配置。

您没有明确说明,但我假设生成 JSON(令牌)的 API 会 运行 在 CorporateCompany 内部并根据 CorporateCompany 的凭据存储对用户进行身份验证。您所描述的基本上是一个安全令牌服务(STS)。

但是,为了让 MegaSocialPlatform 使用此令牌,它需要知道它是由它信任的实体颁发的。这就是 digital signatures 发挥作用的地方。真正的 STS 将使用其私钥对令牌进行签名。消费服务配置有 STS 的 public 密钥,因此能够验证令牌是否由受信任的 STS 颁发。

安全令牌通常包含更多信息。从它们开始有效的 date/time 和之后它们不再有效的 date/time。它们还包含一个受众或依赖方标识符,以指示令牌的用途,以防止使用为 MegaSocialPlatform 的其他服务颁发的令牌。

显然,客户端 - STS 和客户端 - MegaSocialPlatform 之间的所有通信都必须通过加密通信通道 (https) 完成,因为承载令牌容易被盗。

创建安全的解决方案并非易事。因此,您应该避免实施自己的协议和库或来自信誉良好的来源的框架。 您可能想查看 JWT token 以获取有关 JSON 格式的安全令牌的更多信息。