REST和服务到服务的身份验证

问题描述 投票:1回答:2

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

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

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

服务A有一个POST端点,比方说POST /customers创建一个客户。

我在Api网关POST /gtw/customers上也有POST端点。它以某种方式进行验证(调用其他服务)的方式起作用,如果一切正常,则将请求委派给服务A。

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

  1. 通过JWT令牌保护服务A中的端点,API网关将生成令牌,然后可以调用服务A中的端点
  2. 按原样保留,因为服务A在DMZ中运行,因此无法直接调用(因此基本上在“基础结构”级别上将其保护)。

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

rest security jwt microservices
2个回答
0
投票

我们一起讨论

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

中调用端点

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

保留原样,因为服务A在DMZ中运行,因此不能直接调用(因此基本上在“基础结构”级别上受保护)

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


0
投票

据我所知,我建议您使用OAuth来保护服务到服务的身份验证。对于您的特定情况,您可以使用“客户端凭据”授予类型。它也很容易实现。使用JWT是做到这一点的一种方法,但是对于您而言,我认为带有客户端证书授予权限的OAuth 2.0将是一个完美的选择。

© www.soinside.com 2019 - 2024. All rights reserved.