API 身份验证最佳做法

时间:2021-06-24 11:38:33

标签: authentication oauth-2.0

对于允许客户访问其数据的客户 API,我想知道进行身份验证的最合理方法是什么。目前该 API 基于 OAuth 2.0 和授权代码流,但存在一些挑战:

  • 许多客户对 OAuth 2.0 的了解有限/一无所知,并且不想参与该标准。此外,许多客户通常具有有限的编程技能。他们只是想要一个简单的解决方案来检索他们的数据。
  • 通过浏览器的登录流程被认为不方便。
  • 刷新令牌会在某个时候过期,但客户不想再次登录。
  • 令牌和端点是特定于身份验证服务器的。不兼容的更改需要客户端的操作,包括手动重新登录。这使得授权服务器供应商更改或仅进行重大更新变得困难。

最近我经常看到令牌是一种更简单的身份验证方法:

  • 在 Web 前端内,会根据用户帐户创建 API 令牌。此令牌在被撤销之前一直有效。
  • 此令牌通过授权标头以某种方式传递给服务器。

这是有效的前进方式吗?有没有其他选择?是否可以在每次使用时更新刷新令牌的有效性,以便在经常使用(并更新)令牌的情况下永远不需要新的登录?

1 个答案:

答案 0 :(得分:0)

制定标准是为了帮助行业保持高水平的互操作性和安全性。您可以实施自己的解决方案,但它可能不像 OAuth 流程那样健壮和安全。例如,在我看来,发行一个在被撤销之前一直有效的令牌是一种非常糟糕的做法。如果有人设法窃取了该令牌,只要您没有注意到发生了一些奇怪的事情,他们就可以访问您的 API。

您的客户可能想要一个简单的解决方案,但这意味着它不安全。

如果他们实施 OAuth 流程有问题,也许您应该提供自己的 SDK 或库,这将使他们更轻松地处理流程。他们调用方法 getToken 的库,所有细节都由您的库处理。

我也不同意 OAuth 兼容供应商很难改变的观点。在大多数产品中,您可以轻松更改端点的路径,并且参数和流程是标准化的。您可以更改授权服务器,而您的用户不会注意到这一点(如果您拥有符合标准的服务器)。

至于滚动会话,您可以实现它。每当刷新令牌用于获取新的访问令牌时,您都可以发出具有延长到期时间的新刷新令牌。这样刷新令牌就可以无限期地有效,只要用户继续使用它。