繁体   English   中英

REST 和服务到服务身份验证

[英]REST and service to service authentication

我正在研究微服务应用程序,现在正在考虑如何处理服务调用中的安全性。

为简单起见,假设我只有两个服务:

  1. Api网关(暴露在互联网上)
  2. 服务 A(在 DMZ 中,只能通过 API gtw 访问)

服务 A 有一个 POST 端点,假设POST /customers来创建一个客户。

我在 Api Gateway POST /gtw/customers上也有 POST 端点。 它的工作方式是进行一些验证(调用一些其他服务),如果一切正常,那么它将请求委托给服务 A。

我想要实现的是服务 A 中的端点只能由 API 网关调用(因此应用了验证)。 我正在考虑两种方法:

  1. 通过 JWT 令牌保护服务 A 中的端点,API 网关将生成令牌,然后它可以调用服务 A 中的端点
  2. 保持原样,因为服务 A 在 DMZ 中运行,所以不能直接调用它(所以基本上它是在“基础设施”级别上进行保护的)。

通过 JWT 令牌处理服务到服务身份验证是否是一种好方法?

让我们讨论两者

通过 JWT 令牌保护服务 A 中的端点,API 网关将生成令牌,然后它可以调用服务 A 中的端点

有时身份验证不是唯一的事情。 授权也有很大的作用。 如果您的服务具有基于角色的功能,那么这种方法是必须的。 您的网关将验证令牌并将传递给您相同的令牌。 JWT 将包含可能包含角色的声明。 因此,在根据角色完全填充请求之前,您必须重新验证并提取声明。 即使在服务间通信中,服务也应该将 JWT 令牌与请求一起传递,并且您的服务应该对其进行验证。 我总是喜欢这种方法,因为 JWT 始终可以在本地进行验证,并且您可以避免 Http 往返,因此它不会减慢流程。

保持原样,因为服务 A 在 DMZ 中运行,所以不能直接调用(所以基本上它是在“基础设施”级别上进行保护的

此方法适用于简单的 Http 调用,但仅当您在私有子网或 DMZ 中运行后端服务时才有效。 您应该只将这种方法用于简单的服务,而绝不能用于保存敏感数据的服务。

据我所知,我建议您使用 OAuth 来保护服务到服务的身份验证。 对于您的特定情况,您可以使用客户端凭据授予类型。 它也很容易实现。 使用 JWT 是其中一种方法,但对于您的情况,我觉得 OAuth 2.0 与客户端凭据授予访问权限将是完美匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM