这只是关于微服务架构的一般问题。如果外部世界无法访问它们,为什么 2 个或更多内部服务仍然需要像 oauth2 这样的 token 身份验证来相互通信?他们的 api 不能只是过滤内部 IP 地址吗?这种方法有什么风险?
最佳答案
Why do 2 or more internal services still need token auth like oauth2 to communicate with each other if the outside world doesn't have access to them?
您不需要 OAuth2 或 token 身份验证,但您应该使用它。这取决于您对流量的信任程度。现在在“云时代”,不拥有自己的数据中心是很常见的,因此还有另一部分拥有您的服务器和网络硬件。该部分可能会配置错误,例如来自其他客户的流量被路由到您的服务器。或者,您可能设置了自己的基础架构并进行了错误配置,从而导致来自测试环境的流量无意中路由到您的生产服务。有处理这种新情况的新做法,在 Google BeyondCorp 中进行了描述。和 Zero Trust Networks .
本质上,您不应该信任网络流量。对所有请求使用身份验证(例如 OAuth2、OpenID Connect、JWT),并使用 TLS 或 mTLS 加密所有流量。
Couldn't their apis just filter internal IP addresses instead? What are the risks with that approach?
见上文,也许你也不应该相信内部流量。
此外,现在您的最终用户通常使用 OpenID Connect(基于 OAuth2 的身份验证)进行身份验证 - 在
Authorization: Bearer
中发送的 JWT token 标题。在处理请求时,您的大部分系统都将在用户上下文中运行,该上下文位于 JWT token 内,并且很容易将该 token 在请求中传递给用户请求的操作中涉及的所有服务。
关于docker - 如果外部无法直接访问api,为什么内部服务之间的通信需要像oauth这样的授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61756854/