服务器到服务器REST API安全

tpo*_*pow 5 security rest

我们正在构建一个REST API,该API仅可从一组已知的服务器中访问。我的问题是,如果没有直接来自任何基于浏览器的客户端的访问权限,则需要什么安全机制。

目前拥有:

  • 显然是通过HTTPS
  • 启用HTTP身份验证,API使用者具有密钥和密码

是否需要:

  • 创建一些更改密钥,例如为请求形成并在端点验证的md5(timestamp +令牌)?
  • 使用oauth(两足式授权)?

Reg*_*for 3

无关紧要——是否来自浏览器。

是否有必要:

创建一些变化的密钥,例如为请求形成并在端点验证的 md5(时间戳 + 令牌)?

使用oauth(2足授权)?

使用 OAuth,它可以解决这两个问题。OAuth 的使用很好,因为:

  • 你不是在重新发明轮子

  • 已经有很多依赖于技术堆栈的库和方法

您还可以使用 JWT 令牌在服务之间传递一些带有自定义声明的安全上下文。

另外,作为参考,您可以看看不同的提供商如何解决问题。例如,Azure Active Directory 有用于此目的的代表流 https://learn.microsoft.com/en-us/azure/active-directory/develop/v1-oauth2-on-behalf-of-flow

您的服务之间不强制使用 OAuth2/OpenID Connect,还有其他协议和替代方案,甚至是自定义协议。一切都取决于哪种关系是服务,或者它们都处于完全信任的环境中。

您可以使用任何您喜欢的内容,但主要思想是不要在服务之间共享敏感信息,例如服务帐户凭据或用户凭据。

如果 REST API 安全性是主要要求 - OAuth2/OpenID Connect 可能是最佳选择,如果您只需要以最简单的方式在完全信任的环境中进行安全(在身份验证意义上)调用 - Kerberos,如果您需要它们之间的加密自定义隧道用于传输中的数据加密 - 其他选项,例如 VPN。实现自定义的东西是没有意义的,因为如果您有服务 A 和服务 B,并且希望确保它们之间的调用经过身份验证,那么为了避免耦合和共享敏感信息,您将始终需要一些中央服务 C 作为身份提供者。所以如果你从这个角度思考,OAuth2/OIDC 并不过分

  • 对于服务器到服务器的通信来说,OAuth 似乎太过分了,而且实施起来要昂贵得多。这并不像您需要第三方来进行身份管理和授权。在这种情况下,您也不太可能需要基于令牌的机制来授予对某些资源的访问权限,但不能授予对其他资源的访问权限。在给定的上下文中,SSL + 密码似乎就足够了。 (5认同)
  • 这就是为什么你使用 SSL,显然不要使用 http basic auth。 (2认同)