微服务架构中的社交 SSO 是啥样的?

Posted

技术标签:

【中文标题】微服务架构中的社交 SSO 是啥样的?【英文标题】:What does Social SSO look like in a Microservices Architecture?微服务架构中的社交 SSO 是什么样的? 【发布时间】:2017-10-11 21:44:15 【问题描述】:

晚上好

我正在尝试掌握社交 SSO(Facebook/Google 等)如何在微服务架构中工作的概念。

场景

假设我有 2 个后端微服务(订单、用户)和一个前端(WebApp)

用户:保存用户个人资料详细信息、电子邮件、姓名、地址。 订单:保存链接到用户的订单列表 WebApp:提供与两个后端服务交互的前端。

添加Social SSO,是为了简化用户注册网站http://www.myproduct.com的流程

当一个人使用社交单点登录时,我想在用户服务中创建一个用户帐户。

问题

假设用户在 WebApp 上点击“Login with Facebook”并以“John”身份登录

    在我的用户中为 John 创建帐户的最佳方法是什么 服务?

    以 John 身份登录后,WebApp 如何传播身份 约翰到订单服务?

    Order 服务如何验证 John 是否已登录?

    相互依赖的服务订单和用户如何相互信任?

疑虑

    使用授权服务器(Facebook、Google),下游服务将变得非常“健谈”

谢谢

丹尼尔

【问题讨论】:

【参考方案1】:
    在我的用户服务中为 John 创建帐户的最佳方法是什么?

这里没什么可做的,只需从 FB 获取用户详细信息并调用您的用户创建端点。对于 RESTful API,您可能需要向 https://your_api_gateway/users 发送 POST

    以 John 身份登录后,WebApp 如何将 John 的身份传播到 Order 服务?

一种选择是使用令牌微服务。在登录时,您将创建一个长期存在的身份验证令牌和一个短期访问令牌。身份验证令牌是您从不共享的信任来源。您将访问令牌返回给客户端 webapp。从客户端到您的任何微服务的所有调用都会将该访问令牌作为请求的一部分发送。另一种选择是简单地使用 FB/Google 生成的访问令牌。

    Order 服务如何验证 John 是否已登录?

您的订单服务将在请求中收到访问令牌。只要访问令牌有效,您就可以假定 John 已登录。

    相互依赖的服务订单和用户如何相互信任?

访问令牌由令牌微服务签名 - 这应该是一个受信任的服务 - 它可以包含可以由您的任何微服务进一步验证的其他信息

    使用授权服务器(Facebook、Google),下游服务将变得非常“健谈”

生成访问令牌后,您无需再次调用 FB 或 Google,直到您的 web 应用决定用户需要再次进行身份验证。

【讨论】:

谢谢@clonq 假设令牌服务是一个微服务,该服务会将用户重定向回 WebApp... 将长期存在的令牌作为查询参数传递?这安全吗?其次,假设这个长期存在的令牌实际上是 JWT。 WebApp 会在哪里存储这个?谢谢丹尼尔 不需要重定向。 Web 应用程序将对令牌微服务进行 AJAX 调用,该服务将以 JSON 有效负载的形式返回令牌。在有效负载中发送令牌是安全的,因为无论如何通信都应该通过 HTTPS。我的建议是使用短期令牌来增加安全性,而不是长期令牌,但在任何情况下,Web 客户端都可以根据您的“客户端会话”到期策略将其存储在内存中或将其保存在 localStorage 中。 嗨@clonq WebApp和Token服务是不同的微服务。因此,我想让令牌服务处理来自 SSO 提供者的响应,例如 FB 或 google。鉴于此,我如何让 WebApp 知道它以安全方式生成的长寿命令牌?谢谢 如果您想将调用移动到令牌服务中的 SSO 提供者,您只需将长期存在的令牌返回给客户端。所以流程是这样的:WebApp 调用 TokenService。 TokenService 调用返回令牌的 SSOProvider。 TokenService 然后将令牌返回给 WebApp。有意义吗?

以上是关于微服务架构中的社交 SSO 是啥样的?的主要内容,如果未能解决你的问题,请参考以下文章

我的 Kendo 数据源架构必须是啥样的?

JAVA的三层架构是啥样的?

基于微服务的架构中的上游和下游服务是啥?

微服务架构是啥?

微服务架构是啥

在微服务架构中存储文件的正确方法是啥?