Docker 如果外部世界可以';你不能直接访问API吗?

Docker 如果外部世界可以';你不能直接访问API吗?,docker,authentication,kubernetes,microservices,server-to-server,Docker,Authentication,Kubernetes,Microservices,Server To Server,这只是一个关于微服务架构的一般性问题。如果外部世界无法访问,为什么2个或更多内部服务仍然需要像oauth2这样的令牌身份验证来相互通信?他们的API不能只过滤内部IP地址吗?这种方法的风险是什么?您可以使用Oauth在微服务公开的api上实现非常细粒度的基于角色的访问控制(RBAC),这是使用过滤IP地址无法做到的。对于内部服务,通常不太需要验证令牌(理论上,这已经由面向外部的网关/api完成),以及更多关于传递用户的标识信息的信息。对于内部服务来说,想要知道请求/代理用户是谁来进行权限和访问控

这只是一个关于微服务架构的一般性问题。如果外部世界无法访问,为什么2个或更多内部服务仍然需要像oauth2这样的令牌身份验证来相互通信?他们的API不能只过滤内部IP地址吗?这种方法的风险是什么?

您可以使用Oauth在微服务公开的api上实现非常细粒度的基于角色的访问控制(RBAC),这是使用过滤IP地址无法做到的。

对于内部服务,通常不太需要验证令牌(理论上,这已经由面向外部的网关/api完成),以及更多关于传递用户的标识信息的信息。对于内部服务来说,想要知道请求/代理用户是谁来进行权限和访问控制是很常见的,有时告诉每个需要用户范围的服务创建者在授权标头中接受JWT比说“在
X-COMPANY-user-ID
标头中查找用户ID”更容易

如果外部世界无法访问,为什么2个或更多内部服务仍然需要像oauth2这样的令牌身份验证来相互通信

您不需要OAuth2或令牌身份验证,但应该使用它。这取决于您对流量的信任程度。现在在“云时代”,不拥有自己的数据中心是很常见的,因此还有另一部分拥有自己的服务器和网络硬件。该部分可能会造成配置错误,例如,来自其他客户的流量被路由到您的服务器。或者,您可能设置了自己的基础架构,并进行了错误配置,以便将来自测试环境的流量不间断地路由到生产服务。有新的实践来处理这种新的景观,在和中进行了描述

本质上,您不应该信任网络流量。对所有请求使用身份验证(例如OAuth2、OpenID Connect、JWT),并使用TLS或MTL加密所有流量

他们的API不能只过滤内部IP地址吗?这种方法有什么风险

如上所述,也许您也不应该信任内部流量

此外,现在使用OpenID Connect(基于OAuth2的身份验证)对最终用户进行身份验证是很常见的—JWT令牌在
Authorization:Bearer
头中发送。处理请求时,您的大多数系统将在用户上下文中运行,该请求位于JWT令牌中,并且很容易将该令牌在请求中传递给用户请求的操作中涉及的所有服务