【发布时间】:2015-06-21 02:24:39
【问题描述】:
我很难为微服务架构选择合适/安全的身份验证策略。我在该主题上找到的唯一 SO 帖子是这个:Single Sign-On in Microservice Architecture
我的想法是在每项服务(例如身份验证、消息传递、通知、配置文件等)中对每个用户都有一个唯一的引用(从逻辑上讲,然后是他的user_id)以及获取当前用户的@987654325 的可能性@如果已登录。
根据我的研究,我发现有两种可能的策略:
1。共享架构
在此策略中,身份验证应用程序是一项服务。但是每个服务都必须能够进行转换 session_id => user_id 所以它必须非常简单。这就是我想到 Redis 的原因,它可以存储 key:value session_id:user_id。
2。防火墙架构
在此策略中,会话存储并不重要,因为它仅由身份验证应用处理。然后user_id 可以转发给其他服务。我想到了 Rails + Devise(+ Redis 或 mem-cached,或 cookie 存储等),但有很多可能性。唯一重要的是 Service X 永远不需要对用户进行身份验证。
这两种解决方案在以下方面的比较:
- 安全
- 鲁棒性
- 可扩展性
- 易于使用
或者您可能会建议我在这里没有提到的另一个解决方案?
我更喜欢解决方案 #1,但没有找到太多默认实现来确保我朝着正确的方向前进。
【问题讨论】:
-
您能否提供更多关于您要达到的目标的详细信息?在第一种情况下,身份验证是针对 Redis 进行的,还是在服务本身中进行的?第二张图中缺少Redis,这是故意的吗?
-
我添加了一些信息。请让我知道目前还不清楚。谢谢!
-
您有没有想过创建一个使用 OAuth 协议的微服务,而您的其他服务使用创建的令牌?
-
我对这个解决方案很好奇,但我仍然不明白它在实践中是如何工作的。你知道我在哪里可以找到它的一些标准实现吗?
-
@AugustinRiedinger,感谢您提出这个问题。我还采取了一些小步骤,将我的单体 Web 应用程序分解为微服务。在您的情况下,服务 1-n 是无状态的还是有状态的。如果它们是状态完整的,您是否考虑过在每个服务中管理会话。谢谢
标签: authentication architecture microservices