首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSO (单点登录)的工作原理

SSO (单点登录)的工作原理
EN

Stack Overflow用户
提问于 2016-02-27 07:06:35
回答 3查看 18.4K关注 0票数 27

我正在试着把我的头脑围绕在SSO上。据我所知,SSO允许你登录一次并访问多个应用程序(如果你有权限的话)。因此,我登录到App A。我建立了一个令牌。如何使该令牌对应用程序B可用,这样我就不必再次登录应用程序B(假设用户有权访问A和B)?我的应用程序是AngularJs应用程序。我访问.Net WebAPis获取数据。

我可以查看是否登录到App A并检索令牌,然后通过将令牌传递给App B从App A启动App B。这样,App B拥有令牌并可以发送到服务器,以确保用户可以访问B。但是,如果用户直接打开浏览器并转到App B,那么他们的会话如何与现有令牌建立?

如果答案是后端服务器上存在会话状态,那么会话状态如何将登录到App A的用户与App B的新请求相匹配?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-27 07:24:05

当然,有很多方法可以做到这一点,而且可能会很棘手。我可以给你一个解决方案作为例子:

考虑不同子域上的两个应用程序:

代码语言:javascript
复制
The Fine Corinthian Turkey Shop (turkey.example.com)
Rent a Baboon (monkey.example.com)

这两个web应用程序想要共享signon,并为他们的单点登录安排第三个托管网站:

代码语言:javascript
复制
sso.example.com

那么流程是:

http://turkey.example.com/orders/12

  • SSO访问
  1. 重定向到https://sso.example.com/login
  2. SSO向用户提供登录表单,验证并颁发令牌
  3. 令牌保存在单点登录上的cookie中。
  4. 用户现在在单点登录上进行验证,但需要将令牌返回给土耳其。
  5. 单点登录将组合(Guid,令牌,过期)存储在服务器上,其中Guid是随机的guid,过期时间大约为30秒。
  6. SSO在包含Guid的*.example.com上设置安全cookie
  7. SSO重定向回Guid现在可以从cookie
  8. Turkey调用SSO服务器检索票证,并在浏览器中交换token.
  9. Turkey stores令牌的票证(通常是cookie)

现在让我们想象一下,Frank想要一些美味多汁的企鹅来搭配火鸡:

单点登录弗兰克访问:http://monkey.example.com/order-in-bulk

  • SSO看到弗兰克已经登录,因为他有一个存储的令牌。

  1. 在server
  2. Process上存储新的(Guid,令牌,过期)三元组与初始登录相同,其余的方式是
票数 50
EN

Stack Overflow用户

发布于 2016-02-28 20:16:11

然而,如果用户直接打开浏览器并转到App B,那么他们的会话是如何与现有令牌建立的?

如果答案是后端服务器上存在会话状态,那么会话状态如何将登录到App A的用户与App B的新请求相匹配?

我想说它更多的是关于cookie和重定向,而不是令牌。一旦建立了用户身份,就会生成令牌。

因此,当您通过浏览器点击App B时,App B会将您的用户代理重定向到Auth Server (它可能会将您重定向到SSO站点)。

需要注意的是,SSO登录请求实际上是浏览器和SSO服务器之间的HTTP请求。

所以SSO cookie已经存在了--因为早些时候,App A还会将您的用户代理重定向到执行登录的Auth / SSO服务器。然后,SSO服务器可以在您和它之间持久化一个cookie。

我可以查看是否登录到应用程序A并检索令牌,然后通过将令牌传递给应用程序B从应用程序A启动应用程序B。

我不确定我是否理解应用程序A将其令牌传递给应用程序B。通常,应用程序(Oauth 2.0客户端)不会共享令牌。App B应向Auth服务器发出自己的请求,该服务器(如果用户已登录)可能会跳过登录部分,但随后将需要验证:

  1. 应用程序B有权访问请求的作用域,并且
  2. 已向登录用户授予了对这些作用域的访问权限。

如果用户已经登录,并且之前已经批准了作用域访问,那么除了一堆重定向之外,所有这些处理对最终用户都是无缝的。

这假设你使用隐式授权流程(我注意到你的应用程序之一是angularjs应用程序)。

如果您使用Oauth2.0授予的代码、密码或客户端凭据,那么您可能会在初始用户登录和同意后收到刷新令牌。

刷新令牌相当于长期访问(仅针对该应用程序),无需再次登录并多次获得最终用户的同意。

票数 3
EN

Stack Overflow用户

发布于 2019-08-03 19:03:46

当弗兰克去monkey.example.com时,sso.example.com存储了一个cookie和相同的cookie帮助。如果sso.example.com觉得cookie太旧,那么它可以再次请求登录auth

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35663357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档