如何利用 oauth 为微服务应用实现 SSO

Posted

技术标签:

【中文标题】如何利用 oauth 为微服务应用实现 SSO【英文标题】:How to leverage oauth to implement SSO for micro service apps 【发布时间】:2015-10-08 05:13:42 【问题描述】:

我们想在微服务应用之间建立 SSO,

例如:在电子商务网站中,如果用户登录到主应用程序,则应自动允许用户访问与其连接的购物车应用程序,这是一项微服务。

我搜索了 Oauth 规范,但我可以找到任何针对我的案例的相关答案。 一些与 Oauth 不同的东西是

用户无需针对识别提供者授权资源(购物车应用)。它应该在后端无缝完成。 我们不想使用外部身份提供者,如 facebook、google、主应用程序(来自例如上面)应该充当身份提供者。

问题

1. oauth 中是否定义了标准方式(过程)来处理此类身份验证/授权?

    如果不是,最受欢迎的替代品是什么?

其他信息: 我们的应用程序是使用 Ruby on Rails 构建的,如果您知道任何好的 gem,请提出建议。

我发现了几个与此相关的问题(1,2),但范围更广。甚至谷歌也没有帮助,所以请不要将此问题标记为重复。

【问题讨论】:

【参考方案1】:

如果您确实想使用 SSO,请让您的所有服务接受相同的令牌,该令牌在用户登录时由授权服务器返回。例如,对其进行加密并放入 cookie - 在这种情况下,您的 Web 前端将通过验证用户身份来验证用户身份针对授权服务器的令牌并返回用户特定的内容。

这同样适用于购物车服务 - 它可以通过令牌获取用户名并返回用户特定的购物车物品。

优点:用户无法访问其他用户的数据,用户注销会禁用所有服务。

缺点:您将需要“超级用户”或其他 API 来执行后台或分析任务。

【讨论】:

以上是关于如何利用 oauth 为微服务应用实现 SSO的主要内容,如果未能解决你的问题,请参考以下文章

Spring Oauth2 SSO - 无法从 Auth 服务器注销

如何设置Kibana SSO(通过OAuth)?

Spring Cloud云架构 - commonservice-sso服务搭建

Spring Cloud云架构 - commonservice-sso服务搭建

同时为多个社交网络启用OAuth2Sso

SSO单点登录之OAuth2.0登录认证