我很难为微服务架构选择一个体面/安全的身份验证策略。我在该主题上找到的唯一 SO 帖子是:微服务架构中的单点登录
我的想法是在每项服务(例如身份验证、消息传递、通知、配置文件等)中对每个用户都有一个唯一的引用(在逻辑上然后是他的user_id
),并且如果登录则可以获得当前用户的可能性id
。
根据我的研究,我发现有两种可能的策略:
1. 共享架构
在此策略中,身份验证应用程序是其他服务中的一项。但是每个服务都必须能够进行转换session_id
=>user_id
所以它必须非常简单。这就是我想到 Redis 的原因,它可以存储 key:value session_id:user_id
。
2.防火墙架构
在此策略中,会话存储并不重要,因为它仅由身份验证应用程序处理。然后user_id
可以转发到其他服务。我想到了 Rails + Devise(+ Redis 或 mem-cached,或 cookie 存储等),但有很多可能性。唯一重要的是服务 X 永远不需要对用户进行身份验证。
这两种解决方案在以下方面如何比较:
- 安全
- 稳健性
- 可扩展性
- 使用方便
或者你可能会建议我在这里没有提到的另一个解决方案?
我更喜欢解决方案#1,但没有找到太多默认实现来保护我,因为我正朝着正确的方向前进。