我在为微服务架构选择一个良好/安全的身份验证策略上遇到了困难。我在这个主题上找到的唯一一个SO帖子是这个:Single Sign-On in Microservice Architecture
我的想法是,在每个服务中(例如认证、消息传递、通知、个人资料等),都有对每个用户的唯一引用(很自然地使用他的user_id
),并且有可能获取当前用户的id
如果已经登录。
从我的研究中,我看到有两种可能的策略:
1. 共享架构
在这种策略中,认证应用程序是其他服务之一。但是每个服务都必须能够进行转换session_id
=> user_id
,因此它必须非常简单。这就是为什么我考虑Redis,它将存储键值session_id:user_id
。
2. 防火墙架构
在这种策略中,会话存储并不重要,因为它仅由认证应用程序处理。然后user_id
可以转发给其他服务。我考虑了Rails + Devise(+ Redis或mem-cached,或cookie存储等)但是有很多可能性。唯一重要的事情是Service X永远不需要验证用户。
这两种解决方案在以下方面有何比较:
- 安全性
- 健壮性
- 可伸缩性
- 易用性
或者你会建议我在这里没有提到的其他解决方案吗?
我更喜欢解决方案#1,但是还没有找到太多默认实现,可以确保我朝着正确的方向前进。