网站跨站点单点登录的实现

  • 前言
  • 实现方法
    • 跨子域(Across-Subdomains)
    • 完全跨域(Across-Domains)
      • 用户首次单点登录
      • 用户跨站访问
      • 用户退出登录
  • 结语
    • 参考资料

前言

网站的用户身份验证往往使用 Cookie 技术。用户在一个网站进行登录以及身份验证的过程一般为:

  • 在登录页面进行登录后,将登录用户的用户名等信息加密后写在本地浏览器中,也就是一个 Cookie,我们把这个 Cookie 叫做票(Ticket)。
  • 需要判断用户是否登录的页面,需要读取相应 Ticket,并从中解密出用户信息,如果 Ticket 不存在或者无法解密出有意义的内容,意味着用户没有登录,或者登录信息不正确,这时就要跳转到登录页面进行登录。
  • 加密 Cookie 的作用有两个,一是防止用户信息被不怀好意者看到,二是保证 Ticket 无法被伪造,后者更为重要。

跨站点设置 Cookie 的一个关键用途就是跨站单点登录,也就是用户在一个站点登录之后,可以在另一个站点直接获取登录状态。

实现方法

实现跨站单点登录要分为 跨子域完全跨域 两种情况。

跨子域(Across-Subdomains)

所谓跨子域是指站点之间位于同一个父域下,如:https://a.2000.com 与 https://b.2000.com 位于同一个父域 2000.com 下。

跨子域登录的步骤与普通登录时完全相同,只是写 Cookie 时需要将 Cookie 的域写为需要跨站单点登录的站点之间共同的父域。如:cookie.domain="2000.net",这样子域之间就自然可以共享 Cookie 了。

要注意的是,用户退出登录时,删除 Cookie 一定要删除域为父域的 Cookie,从而让跨站单点登录的所有网站全部退出登录状态。

完全跨域(Across-Domains)

完全跨域是指站点之间没有共同的父域,如 https://a.2000.com 与 https://b.2001.com。这时就需要借助一个验证站点,需要跨站单点登录的站点在验证失败时,将跳转到专门的验证站点进行登录,使用同一个验证站点的 Ticket 来判断用户是否登录。

首先上一张概念图:

从图中可以看到,我们有三个模块:用户浏览器客户端,需要实现跨站单点登录的站点们(a.2000.com、b.2001.com…),验证站点(passport.2021.com)。

咱们一个个地分析:

用户首次单点登录

为图中黑色线条且带序号的步骤(1~6)。

  1. 用户访问 A 站点的网页
  2. A 站点读取用户浏览器的 A-Ticket(A 站点验证用户身份的票据),由于用户是首次登录,所以浏览器没有 A-Ticket。导致验证失败,这时网页跳转到 P 站点的验证模块。
  3. P 站点同样读取用户浏览器的 P-Ticket,同样没有,验证失败。重定向到 P 站点的登录处理页面,此时,用户需要按照页面提示完成登录。
  4. 用户登录成功后,P 站点生成 P-Ticket 并写入浏览器。接着页面跳转到 A 站点的登录处理模块,并携带用户在 P 站点时的登录信息,从而直接触发 A 站点的登录处理,由于用户身份已经在 P 站点验证通过了,所以 A 站点的登录也必然是成功的,登录后,A 站点同样会生成 A-Ticket 并将其写到用户浏览器中。
  5. A 站点隐式登录成功后,重定向到开始的验证模块。
  6. 此时,用户浏览器已经拥有了 A-Ticket,所以成功判断用户为已登录状态,可以进行跳转。

用户跨站访问

用户在 A 站点单点登录(其实是在 P 站点完成的)后,首次对 B 站点进行访问。

  1. 浏览器中没有 B-Ticket,所以 B 站点验证失败。跳转到 P 站点的验证模块。
  2. P 站点读取用户浏览器中的 P-Ticket,进行验证后发现用户已经登录过了,便直接携带从 P-Ticket 中解密得到的用户信息跳转到 B 站点的登录处理。同样可以通过 B 站点的登录,此时,B 站点也会生成 B-Ticket 并将其写到用户浏览器中。
  3. B 站点隐式登录成功后,重定向到用户最初访问的页面,此时,用户浏览器已经拥有了 B-Ticket,所以成功判断用户为已登录状态。

用户退出登录

一般来说,删除用户当前访问的站点的 Ticket 和 P-Ticket 即可。

结语

对跨站设置 Cookie 实现单点登录的方法进行简要介绍。

参考资料

https://www.cnblogs.com/huaxingtianxia/p/6236804.html


如有差错,敬请指正。

跨站点设置 Cookie相关推荐

  1. 【跨域】一篇文章彻底解决跨域设置cookie问题!

    一篇文章彻底解决跨域设置cookie问题! 大家好我是雪人~~⛄ 之前做项目的时候发现后端传过来的 SetCookie 不能正常在浏览器中使用. 是因为谷歌浏览器新版本Chrome 80将Cookie ...

  2. php利用P3P头实现跨域设置cookie

    在开发中,我们碰到的跨域主要还是纠结在IE,页面中的IFRAME或者FRAME或者JS跨域的时候,IE有安全策略限制页面不带cookie,但是如果我们加上P3P,就没有这策略的限制.这也是P3P来突破 ...

  3. SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析

    最近在研究SSO单点登录技术,其中有一种就是通过js的跨域设置cookie来达到单点登录目的的,下面就已京东商城为例来解释下跨域设置cookie的过程 涉及的关键知识点: 1.jQuery ajax跨 ...

  4. php跨域单点登录,SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析...

    SSO单点登录技术,其中有一种就是通过js的跨域设置cookie来达到单点登录目的的,下面就已京东商城为例来解释下跨域设置cookie的过程 涉及的关键知识点: 1. 跨域redirect实例: te ...

  5. 解决跨域设置Cookie问题

    如a.123.com跨域访问b.123.com. b.123.com服务器使用nginx允许跨域,Access-Control-Allow-Origin:* 如果a.b服务不在同一个服务器 前台页面请 ...

  6. 使用p3p跨域设置Cookie

    有些时候不能将url上的参数传来传去,比如与调用某开放平台上的接口,这时候可能需要借助Cookie来进行处理了,但这里可能又涉及到跨域的问题. 如果浏览器开启了对Cookie的支持,按照Cookie ...

  7. 通过P3P头实现跨域设置cookie

    PHP的setcookie函数可以设置域,但是只能在当前域内,如果出现多域可由如下办法处理: 实现原理: www.b.com/set_cookie.php   在b域名下设置a域名的cookie &l ...

  8. iframe跨域设置cookie

    <?php header("Set-Cookie: test=xxx;Secure;SameSite=None"); ?>

  9. 转载 - 通过设置P3P头来实现跨域访问COOKIE

    作者:老王 网上看了别人介绍的一片文章,说使用P3P可以完成跨域COOKIE操作,感觉很COOL,不过没有提供源代码,我胡乱写了一下,大家看看. 实际工作中,类似这样的要求很多,比如说,我们有两个域名 ...

  10. 前后端分离单点登录SSO实现方案 淘宝、京东跨域获取Cookie、OAuth2、QQ客户端多种模式

    演示Demo站点 http://sso.exrick.cn 开源版Github地址 https://github.com/Exrick/x-boot) 开发文档 https://www.kanclou ...

最新文章

  1. 单击事件开启线程时,再次单击就会出现 java.lang.IllegalThreadStateException: Thread already started. 错误
  2. sitemesh官网简介,安装配置教程。(非常适合新手)
  3. parasoft Jtest 使用教程:防止特定应用错误的再次发生
  4. 安卓手机挂载Linux,android 挂载NFS教程
  5. 设计模式解密(12)- 桥接模式
  6. 供应商去市网维护银行账号信息_供应商信息中心是BBP系统中一项很重要的内容...
  7. [转载] Java中的关键字含义以及介绍
  8. 博弈论学习 | 第七章 Evolutionary Game Theory
  9. metersphere性能测试测试资源池添加以及修改并发数
  10. 电脑调分辨率黑屏了怎么办_Win10调分辨率后出现黑屏提示“超出工作频率范围”怎么办...
  11. h5-吸顶效果的实现方法
  12. 如何查看本地ip地址和外网地址
  13. 理性看待 数据分析师 Hot!
  14. JVM内部锁升级过程(偏向锁,轻量级锁,重量级锁)
  15. 前端模块化,有这一篇就够了(上)
  16. 广东中山电信DNS地址 (铁通/网通)
  17. 金钩钓鱼java代码_金钩钓鱼
  18. 【mysql】隔离级别的理解及效果演示(通俗易懂,不涉及原理)
  19. windows 11远程桌面连接无法使用已保存的凭据密码,每次连接都要求输入的解决方案
  20. 智象运维 | 如何利用snmp trap监控交换机端口状态(Up/Down)

热门文章

  1. 同一工作组计算机无法查看,win7系统在同一个工作组看不到其他电脑怎么回事?...
  2. 安卓开发颜色以及对应代码(转载)
  3. 江南大学物联网工程学院数据库课程实验一作业1实验报告
  4. if语句(判断年月日)
  5. 【附源码】计算机毕业设计SSM食疗养生服务平台
  6. iOS关于subView和superview的关系
  7. dub解析json为构
  8. 优惠券管理--优惠券类型
  9. 树莓派 Linux 操作系统大全
  10. RK3568 Android固件介绍、固件烧录、开机进系统