微服务认证:Amazon API Gateway

4
我有几个微服务(Springboot),我已经在AWS上托管。例如,假设Service1和Service2是两个微服务。 Service1是由前端和移动应用程序访问的微服务。 Service1会调用Service2。 Service2完全内部。
我已经设置了Amazon API Gateway,它位于Service1的前面。并且我已经使用cognito配置了身份验证(Oauth)。
所有这些都可以工作。当从前端/应用程序调用时,请求需要通过API网关进行身份验证,然后到达Service1。
但我的问题是,如果Service1需要与Service2通信,考虑到我正在使用AWS,哪种身份验证最适合?
  1. 我是否可以重复使用API Gateway生成的令牌。因此,Service1可以将其转发到其请求中的Service2,并以某种方式使Service2通过网关进行验证。这是可能的吗?如果可以,这是一个好主意吗?
  2. 在某些情况下,Service1在没有来自前端/应用程序的请求(cronjob)的情况下与Service2通信。在这种情况下,通信不会通过API Gateway进行,因此不会生成令牌。我该如何处理这种情况。
我不想引入Oauth身份验证以在两个内部微服务之间进行身份验证。我觉得这有点过度。有更好的方法吗?
2个回答

1
一种有效的方法是使用两个级别的API:
  • 入口点API对外公开并通过OAuth进行安全保护
  • 微服务不经OAuth保护,运行在一个被锁定的虚拟专用云中,只有入口点API才能调用
例如: * 在线销售UI调用在线销售API * 在线销售API调用订单和客户微服务
用户上下文可以从OAuth访问令牌传递给微服务,或者可以直接转发令牌本身。
这种方法也表现良好,并避免了对Cognito的过多调用。

是的,这也是我的想法。但是我认为,即使它是一个封闭的虚拟私有云,如果服务之间没有任何身份验证的通信,那也不太好。你觉得呢? - pvpkiran
在我们公司,我们做的与上述内容相同,但是我们对零例外非常严格:没有人可以直接调用部署的微服务,包括开发和QA环境中的测试人员。话虽如此,我对安全影响并不是权威,对这个话题的进一步反馈非常感兴趣。 - Gary Archer

1

正如Gary提到的那样,API的2个级别是一个不错的想法。 此外,我认为服务之间的通信应该是安全的。由于其他服务将在一个受限制的虚拟私有云中运行,您可以在服务中只使用基本身份验证。这就是我们组织的做法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接