验证微服务架构的每个服务中的访问令牌(JWT)

时间:2017-09-15 17:16:46

标签: rest authentication architecture cloud microservices

我有一个使用微服务架构实现的应用程序。有一个使用jwt标准的认证服务(A),在应用程序中还有其他服务,如S1,S2,S3等。 现在例如S1接收请求,它应该验证令牌以查看用户是否被授权。验证可以通过以下方式实现:

  • 将令牌从S1发送到A,然后A验证令牌并将结果发送到S1(这是一种开销)
  • 验证S1内的令牌(这是每个服务中的重复操作,还需要每个服务中的密钥或公钥/私钥,以进行签名/验证)

我不是在问这些方法是如何工作的。问题是,哪一个更好?或者在这种情况下最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

我建议将您的身份验证服务打包在另一个微服务中并与之通信以进行身份​​验证。 (基本上是你的第一选择。)

在微服务生态系统中,如果不是数百个运行(理想情况下)相互独立的应用程序,则可能有10个。使用第二个选项,每次启动新服务时都添加了样板。但也许更重要的是,您已将所有微服务与当前的身份验证方案相结合。最好将所有auth放在接口后面,并将所有auth逻辑隐藏在一个分开的位置。

答案 1 :(得分:2)

我认为你需要考虑两种解决方案并考虑什么是权衡。

拥有单一服务处理授权:

  • 单点故障。如果有人犯了错误,那么整个生态系统就会崩溃。
  • 增加众所周知问题的封装。
  • 减少所有相关服务的工作量。

对每项服务实施授权:

  • 为每个服务提供更多独立性(这是"微服务的性质")

  • 为您提供保护每项服务的灵活性。可能会有所不同,具体取决于每个人的意图。

最后,你需要找到你需要的东西,并根据什么给你更多的好处做出决定。我刚刚列举了一些优点和缺点,但我认为我的想法是在这个主题上投入时间,然后根据您认为最适合您团队的决定做出决定。