一家公司有多个产品线,就可能要有多个子域名,下头以baidu域名为例,a.baidu.com, b.baidu.com。com 是顶级域名,baidu 就是一个二级域名,a和b就是子域名。

当用户在a产品线上登录了系统,此时切换到b产品,为了增加用户体验,不必再让用户登录一次b。所以单点登录就出来了。

  一般的实现就是增加一个passport.baidu.com,专门搞登录的中控服务。

  当用户第一次登录 baidu域下,比如a产品。此时先跳转到passport下进行登录,登录成功以后,passport生成一个token,在session服务中插入登录信息,同时也将其种在cookie里,就放在 .baidu.com域下,当然这个token会和session中的登录信息有联系。

当用户登录b产品线时,检测cookie下这个token在passport的session服务中是否存在,如果存在就认为该用户已经登录过在线状态。

  还有一种需要面对的情况,比如公司还有一个二级域名,举例 hao123.com,这下二级域名不一样了。跨域了,cookie就不能被passport直接拿到了。这怎么办呢?

  可以这样处理,当用户第一次在passport下登录时,生成的这个token,  在passport下跨域去请求 hao123.com,让 hao123.com服务去把这个token种在自己域下cookie里。当用户登录成功 a产品以后,随后去访问了 hao123.com, hao123.com 域下的token被passport的session服务检测,发现ok,就返回给 hao123.com帐号信息。

  以上的实现很容易当然也很粗糙,比如某一个产品线下用户的cookie被盗了,这个token被人用了,这个人就可以随意使用你的帐号在xxx下所有产品线浏览。

  这就需要更安全的机制。各个产品线也有各自的token生成。

  可以用浏览器观察下登录百度passport的现象:

  chrome浏览器登录(在登录passport时,勾选保存log,避免请求日志刷新没了。搜索hao123关键字)。

  发现这个跨域请求是利用图片的src属性,请求hao123站点。把加密的token发到hao123,hao123响应,setcookie把token放到hao123域下。(这里说的token即是百度的bduss)。

  

最新文章

  1. DigitalOcean上使用Tornado+MongoDB+Nginx+Supervisor+DnsPod快速搭建个人博客
  2. DOM解析XML文件
  3. jQuery插件AjaxFileUpload实现ajax文件上传
  4. HDU 5009
  5. 类的const成员
  6. ubuntu server 安装
  7. Java基础知识强化之集合框架笔记07:Collection集合的遍历之迭代器遍历
  8. KEIL C51之绝对地址定位
  9. python运维开发(十一)----线程、进程、协程
  10. bootstrap注意事项(七)图片
  11. show_you_my_codes 001
  12. 一个简单用原生js实现的小游戏----FlappyBird
  13. java面向对象整理
  14. 本地访问服务器上的wamp
  15. C# 初识Redis
  16. JDBC批处理(Batch)MySQL中的表
  17. wslgit
  18. webpack 4 升级点
  19. hdu 5053 (2014上海网赛L题 求立方和)
  20. Git简明教程二、开始进行版本管理

热门文章

  1. python之初识网络
  2. 去除git版本控制
  3. JMeter 配置元件之计数器Counter
  4. 《Inside C#》笔记(二) 初识C#
  5. genymotion和adb的解决方法
  6. python并发编程之线程
  7. mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci
  8. sql最简单的查询语句
  9. centos7发行版号对应基于RHEL Source(版本)对照表
  10. 08 LaTeX学习系列之---Latex 的中文操作