docker - 如果外部无法直接访问api,为什么内部服务之间的通信需要像oauth这样的授权?

标签 docker authentication kubernetes microservices server-to-server

这只是关于微服务架构的一般问题。如果外部世界无法访问它们,为什么 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/

相关文章:

docker - 基于alpinelinux在docker容器中安装iptables

docker - 可以在 docker FROM 中使用变量吗?

docker - 如何从另一个容器连接到服务?

android - 如何从 Facebook 获取 ParseUser 的名称?

kubernetes - 在Kubernetes中,ResourceQuota和LimitRange对象之间有什么区别

templates - 动态 ConfigMap Helm 模板

node.js - 分析我的 NodeJS 服务器显示它挂起......但是如何找出原因?

django - 如何在 docker-compose 中访问 Postgres 数据库

Android:webview 可以自动登录 App Engine 应用程序吗?

javascript - 使用 AngularJS 拦截器防止 HTTP 基本身份验证对话框