我应该如何保护这个公共 API?

问题描述

我已经构建了一个 REST API,它将集成到现有的消费者预订系统/应用程序中,并使他们的客户(最终用户)能够预订我公司提供的其他商品/服务。

例如,最终用户预订住宿,如果他们使用的预订系统完全集成了我们的 API,那么该用户还可以为他的旅行租车。

因此,参与此 B2B2C 业务的三方(在迷你流程图中)是:

API(我的公司) 客户(预订提供商)(客户的客户)最终用户

代表最终用户,我们的客户(预订提供商)可以调用我们的以下端点:

  1. 检查产品可用性
  2. 下订单
  3. 取消订单

我们希望预订提供商在他们的系统中“安装”我们的 API 服务,从而为他们的最终用户提供我们的服务,然后真的不必担心(即不必一直登录重新进行身份验证)。我的问题是,您将如何保护这些端点?

  1. Api 密钥 - 那么预订提供商在他们的请求中硬编码密钥?

  2. JWT - 预订提供商必须硬编码他们的登录详细信息,以便在每次有会话时自动检索访问令牌?

  3. Oauth - 与 JWT 相同的问题?

这些似乎都不是最佳选择。如果您有任何建议,我将不胜感激。

解决方法

在我看来,在你描述的场景中,Api Key 和 JWT/OAuth 之间没有太大区别。

我个人会选择 Api Key,或者如果您确实需要保持更高级别的安全性,您可以考虑基于证书的相互身份验证。