微服务之间的身份验证:Amazon API Gateway

时间:2019-12-11 18:43:45

标签: spring-boot authentication oauth-2.0 microservices aws-api-gateway

我在AWS上托管了几个微服务(Springboot)。例如,假设Service1和Service2是两个微服务。 Service1是可由前端和移动应用程序访问的微服务。 Service1调用Service2。 Service2完全是内部的。

我已经设置了位于Service1前面的Amazon API Gateway。我已经使用cognito配置了Authentication(Oauth)。

所有这些都有效。从前端/应用程序调用时,需要先通过API网关对请求进行身份验证,然后才能到达Service1。

但是我的问题是,如果Service1需要与Service2通信,考虑到我正在使用AWS,哪种身份验证最合适?

  1. 我可以重新使用API​​网关生成的令牌吗?这样,Service1可以在其请求中将其转发给Service2,并且Service2以某种方式通过网关进行验证。可能吗?如果是,这是个好主意吗?

  2. 在某些情况下,Service1与Service2通信而没有来自前端/应用程序的请求(cronjob)。在这种情况下,通信不会通过API网关进行,因此不会生成令牌。我应该如何处理案件。

我不想引入Oauth身份验证来在两个内部微服务之间进行身份验证。我觉得这有点过分了。有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

一个有效的选择是拥有2级API:

  • 入口点API暴露于外界,并通过OAuth进行保护
  • 微服务不受OAuth保护,无法在锁定的虚拟私有云中运行,只有入口点API才能调用

例如: * Online Sales UI调用Online Sales API *在线销售API调用订单和客户微服务

OAuth访问令牌中的用户上下文可以从入口点API传递到微服务-或令牌本身可以转发

这也表现不错,并且避免了对Cognito的过多调用。

答案 1 :(得分:0)

正如Gary所提到的,

2级API是一个好主意。 我认为,服务之间的通信也应得到保护。由于其他服务将在锁定的虚拟私有云中的联合国环境中运行,因此您只需在服务中使用 基本身份验证 即可。这就是我们在组织中所做的事情。