微服务authentication策略

我很难为微服务体系结构select体面/安全的身份validation策略。 我在这个主题上发现的唯一的SOpost是这样的:微服务架构中的单点login

我的想法是在每个服务(例如身份validation,消息传递,通知,configuration文件等)中为每个用户提供一个唯一的引用(在逻辑上与他的user_id相当),并且可以在login时获得当前用户的id

从我的研究中,我发现有两种可能的策略:

1.共享架构

共享的架构

在这个策略中,authentication应用程序是一个服务。 但每个服务必须能够进行转换session_id => user_id所以它必须是死的简单。 这就是为什么我想到Redis,它会存储关键字:value session_id:user_id

2.防火墙架构

防火墙架构

在这种策略中,会话存储并不重要,因为它只能由validation应用程序处理。 然后user_id可以转发到其他服务。 我想过Rails + Devise(+ Redis或者mem-cached,或者cookie存储等),但是有很多的可能性。 唯一重要的是Service X将永远不需要authentication用户。


这两个解决scheme如何比较:

  • 安全
  • 稳健性
  • 可扩展性
  • 使用方便

或者,也许你会build议我在这里没有提到的另一个解决scheme?

我更喜欢解决scheme#1,但是还没有find太多的默认实现来保证我的方向正确。

我希望我的问题没有结束。 我真的不知道还有什么要问的。

提前致谢

根据我的理解,解决这个问题的好方法是使用OAuth 2协议(在http://oauth.net/2/上可以find更多的信息);

当你的用户login你的应用程序时,他们将得到一个令牌,并使用这个令牌,他们将能够发送到其他服务,以在请求中识别它们。

OAuth 2模型

链式微服务devise实例 建筑模型

资源:

您可以使用身份validation服务器4进行身份validation和授权

您必须使用防火墙架构,因此您可以更好地控制安全性,健壮性,可扩展性和易用性