单点登录

什么是单点登录,举个例子,如果你登录了msn messenger,访问hotmail邮件就不用在此登录。
一般单点登录都需要有一个独立的登录站点,一般具有独立的域名,专门的进行注册,登录,注销等操作。
我们为了讨论方便,把这个登录站点叫做站点P,设其Url为http://passport.yizhu2000.com,需要提供服务的站点设为A和B,跨站点单点登录是指你在A网站进行登录后,使用B网站的服务就不需要再登录。

从技术角度讲单点登录分为:

  • 跨子域单点登录
  • 完全跨单点域登录

跨子域单点登录

所谓跨子域登录,A,B站点和P站点位于同一个域下面,比如A站点为http://blog.yizhu2000.com B站点为 http://forum.yizhu2000.com,他们和登录站点P的关系可以看到,都是属于同一个父域,yizhu2000.com,不同的是子域不同,一个为blog,一个为forum,一个是passport。

我们先看看最常用的非跨站点普通登录的情况,一般登录验证通过后,一般会将你的用户名和一些用户信息,通过某一密钥进行加密,写在本地,也就是一个加密的cookie,我们把这个cookie叫做–票(ticket)。

需要判断用户是否登录的页面,需要读取这个ticket,并从其中解密出用户信息,如果ticket不存在,或者无法解密,意味着用户没有登录,或者登录信息不正确,这时就要跳转到登录页面进行登录,在这里加密的作用有两个,一是防止用户信息被不怀好意者看到,二是保证ticket不会被伪造,后者其实更为重要,加密后,各个应用需要采用与加密同样的密钥进行解密,如果不知道密钥,就不能伪造出ticket。
(注:加密和解密的密钥有可能不同,取决于采用什么加密算法,如果是对称加密,则为同一密钥,如果是非对称,就不同了,一般用私钥加密,公钥解密,但是无论怎样,密钥都只有内部知道,这样伪造者既无法伪造也无法解密ticket)

跨子域的单点登录,和上述普通登录的过程没有什么不同,唯一不同的是写cookie时,由于登录站点P和应用A处于不同的子域,P站写入的cookie的域为passport.yizhu2000.net,而A站点为forum.yizhu2000.net,A在判断用户登录时无法读到P站点的ticket,解决方法非常简单,当Login完成后P站点写ticket的时候,只需把cookie的域设为他们共同的父域,yizhu2000.net就可以了:cookie.domain=”yizhu2000.net”,A站点自然就可以读到这个ticket了。

完全跨单点域登录

完全跨域登录,是指A,B站点和P站点没有共同的父域,比如A站点为forum.yizhu1999.net,B站点为blog.yizhu1998.net,大家可以参考微软旗下的几个站点http://www.live.com,www.hotmail.com,这两个站点就没有共同的父域,而仍然可以共用登录,怎样才能实现呢?请参考下图,由于这种情况ticket比较复杂,我们暂时把P站点创建的的ticket叫做P-ticket,而A站点创建的ticket叫A-ticket,B的为B-ticket

由于站点A(forum.yizhu1999.com)不能读取到由站点P(passport.yizhu2000.com)创建的加密ticket,所以当用户访问A站点上需要登录才能访问的资源时,A站点会首先查看是否有A-ticket,如果没有,证明用户没有在A站点登录过,不过并不保证用户没有在B站点登录,(重复一下,既然是单点登录,当然无论你在A,B任意一个站点登录过,另外一个站点都要可以访问),请求会被重定向到p站点的验证页面,验证页面读取P-ticket,如果没有,或者解密不成功,就需要重定向登录页面,登录页面完成登录后,写一个加密cookie,也就是P-ticket,并且重定向到A站点的登录处理页,并把加密的用户信息作为参数传递给这个页面,这个页面接收登录页的用户信息,解密后也要写一个cookie,也就是A-ticket,今后用户再次访问A站点上需要登录权限才能访问的资源时,只需要检查这个A-cookie是否存在就可以了。

当用户访问B站点时,会重复上面的过程,监测到没有B-ticket,就会重定向到P站点的验证页面,去检查P-ticket,如果没有,就登录,有则返回B的登录处理页面写B-ticket。

注销的时候需要删除P-ticket和A-ticket。

怎么删除cookie:本来以为这个不是问题,不过还是有朋友问道,简单的说其实是创建一个和你要删除的cookie同名的cookie,并把cookie的expire设为当前时间之前的某个时间,不过在跨子域的删除cookie时有一点要注意:必须要把cookie的域设置为父域,在本文中为yizhu2000.com。

为了保证各个环节的传输的安全性,最好使用https连接。

本文转载自:
http://www.cnblogs.com/yizhu2000/archive/2008/04/01/1131976.html

Cookie Session跨站无法共享问题(单点登录解决方案)相关推荐

  1. C#session共享+redis_技术干货分享:基于SpringBoot+Redis的Session共享与单点登录

    categories: 架构 author: mrzhou tags: SpringBoot redis session 单点登录 基于SpringBoot+Redis的Session共享与单点登录 ...

  2. 单点登录解决方案CAS

    #单点登录解决方案CAS ##一.单点登录 ​ 单点登录SSO,实现跨域登录.当用户第一次访问系统的时候,会被引导进入认证系统中进行登录:根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应 ...

  3. SSO单点登录解决方案——Filter方式

    SSO单点登录解决方案 2008-11-21 14:26:57|  分类:单点登录 |  标签:|字号大中小 订阅 一般来说,Web应用需要SSO的功能,应该通过以下的交互过程来调用身份认证服务的提供 ...

  4. 分布式单点登录解决方案

    分布式单点登录解决方案 在假设浏览器禁用cookie的情况下,比较推荐的是使用token实现. redis解决方案(推荐): 1.用户登陆,服务器处理,生成token 2.redis设置过期时间将to ...

  5. 构建和实现单点登录解决方案(转载于IBMdeveloperWorks)

    将一个开放源码的基于 Java 的身份验证组件集成进 Web 门户中 在现有的应用程序中实现单点登录解决方案(single sign-on,SSO,即登录一次,就可以向所有网络资源验证用户的身份)是非 ...

  6. 构建和实现单点登录解决方案

    将一个开放源码的基于 Java 的身份验证组件集成进 Web 门户中 在现有的应用程序中实现单点登录解决方案(single sign-on,SSO,即登录一次,就可以向所有网络资源验证用户的身份)是非 ...

  7. 【Python开发】Flask中的单点登录解决方案

    Flask中的单点登录解决方案 1.SSO 和 CAS 单点登录(Single Sign On,SSO)就是通过用户的一次性鉴别登录.当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其 ...

  8. 著名ERP厂商的SSO单点登录解决方案介绍一

    著名ERP厂商的SSO单点登录解决方案介绍一 参考文章: (1)著名ERP厂商的SSO单点登录解决方案介绍一 (2)https://www.cnblogs.com/wintersun/p/557148 ...

  9. Asp.net单点登录解决方案

    Asp.net单点登录解决方案 参考文章: (1)Asp.net单点登录解决方案 (2)https://www.cnblogs.com/wu-jian/archive/2012/11/14/27566 ...

最新文章

  1. 收藏 | Linux常用156个命令汇总!
  2. oracle两列同时去重_Oracle表中重复数据去重的方法实例详解
  3. 实现lua面向对象的private属性
  4. 数据库计算机报告,外文数据库计算机检索报告实例.pdf
  5. spring发送邮件
  6. C++断言与静态断言
  7. 目录遍历漏洞和文件读取漏洞的区别
  8. VMware 修复 Workstation、Fusion 和 ESXi中的多个漏洞
  9. 避免野指针的方法及结构体小细节
  10. char **p作为参数被修改_opencv第1课-加载、修改、保存图像
  11. linux 文件夹 775,Linux chmod目录权限命令图文详解
  12. 【SQL】数据库模糊查询
  13. 随机对偶动态规划 SDDP,报童模型的一个 python 例子
  14. 如何将网络监控摄像头中的网络流 RTSP 转换成 M3U8 流并嵌入微信公众号
  15. SEO网站收录情况分析查询方法(小技巧Tips)
  16. Lambert漫反射模型
  17. CSDN公式插入——关于对数
  18. GaRy-Liang的linux成长日记5-基本命令
  19. 完成“LPS node 与Crazyflie在TWR协议下的成功双向测距”实现心路历程总结
  20. live2d_二次元 | live2d为你的网站博客增加萌萌哒的看板娘

热门文章

  1. fx3g485通讯模块_FX3G-485-BD用户手册三菱FX3G-485-BD数据通讯版手册 - 广州凌控
  2. Docker版本分为CE和EE了
  3. 软件下载官网系统源码
  4. 数学建模系列-评价模型(一)---模糊综合评价法
  5. JLINK仿真器用SWD模式下载程序,和stm32的连线说明
  6. java在线问问题_java问题在线解答
  7. 食堂自动化管理系统C语言,C语言实现食堂就餐管理系统(带链表)
  8. Windows XP 搭建PPPoE服务器_计算机软件及应用_IT/计算机_专业资料
  9. LeetCde_571、超级洗衣机
  10. 如何在mac里安装vmware,在mac里安装虚拟机,如何注册vmware