广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中实现SSO单点登录的方法
  • 368
分享到

PHP中实现SSO单点登录的方法

2023-06-20 14:06:18 368人浏览 八月长安
摘要

这篇文章主要讲解了“PHP中实现SSO单点登录的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中实现SSO单点登录的方法”吧!SSO( Single Sign On ),即单点登录

这篇文章主要讲解了“PHP中实现SSO单点登录的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中实现SSO单点登录的方法”吧!

SSO( Single Sign On ),即单点登录,是一种控制多个相关但彼此独立的系统的访问权限, 拥有这一权限的用户可以使用单一的ID和密码访问某个或多个系统从而避免使用不同的用户名或密码,或者通过某种配置无缝地登录每个系统 。

对于大型系统来说使用单点登录可以减少用户很多的麻烦。就拿百度来说吧,百度下面有很多的子系统——百度经验、百度知道、百度文库等等,如果我们使用这些系统的时候,每一个系统都需要我们输入用户名和密码登录一次的话,我相信用户体验肯定会直线下降。

与 SSO 交互的2个元素:1.  用户,2. 系统,它的特点是:一次登录,全部访问。SSO 是访问控制的一种,控制用户能否登录,即验证用户身份,而且是所有其它系统的身份验证都在它这里进行,从整个系统层面来看 SSO ,它的核心就是这3个元素了:1. 用户,2. 系统,3. 验证中心。

PHP中实现SSO单点登录的方法

1、同一个域但不同的子域如何进行单点登录

假如我们的站点是按照下面的域名进行部署的:

  • sub1.onmpw.com

  • sub2.onmpw.com

这两个站点共享同一域 onmpw.com 。

默认情况下,浏览器会发送 cookie 所属的域对应的主机。也就是说,来自于 sub1.onmpw.com 的 cookie 默认所属的域是 .sub1.onmpw.com 。因此,sub2.onmpw.com 不会得到任何的属于 sub1.onmpw.com 的 cookie 信息。因为它们是在不同的主机上面,并且二者的子域也是不同的。

1.1 设置二者的 cookie 信息在同一个域下
  • 登录 sub1.onmpw.com 系统

  • 登录成功以后,生成唯一标识符Token(知道token,就知道哪个用户登录了)。设置 cookie 信息,这里需要注意,将Token存到 cookie 中,但是在设置的时候必须将这 cookie 的所属域设置为顶级域 .onmpw.com 。这里可以使用 setcookie 函数,该函数的第四个参数是用来设置 cookie 所述域的。

setcookie(‘token’, ’xxx’, '/', ’.onmpw.com’);复制代码
  • 访问 sub2.onmpw.com 系统,浏览器会将 cookie 中的信息 token 附带在请求中一块儿发送到 sub2.onmpw.com 系统。这时该系统会先检查 session 是否登录,如果没有登录则验证 cookie 中的 token 从而实现自动登录。

  • sub2.onmpw.com 登录成功以后再写 session 信息。以后的验证就用自己的 session 信息验证就可以了。

1.2 退出登录

这里存在一个问题就是 sub1 系统退出以后,除了可以清除自身的 session 信息和所属域为 .onmpw.com 的 cookie 的信息。它并不能清除 sub2 系统的 session 信息。那 sub2 仍然是登录状态。也就是说,这种方式虽说可以实现单点登录,但是不能实现同时退出。原因是,sub1 和 sub2 虽说通过 setcookie 函数的设置可以共享 cookie,但是二者的sessionId 是不同的,而且这个 sessionId 在浏览器中也是以 cookie 的形式存储的,不过它所属的域并不是 .onmpw.com 。

那如何解决这个问题呢?我们知道,对于这种情况,只要是两个系统的 sessionId 相同就可以解决这个问题了。也就是说存放 sessionId 的 cookie 所属的域也是 .onmpw.com 。在PHP中,sessionId 是在 session_start() 调用以后生成的。要想使sub1 和 sub2 有共同的 sessionId ,那必须在 session_start() 之前设置 sessionId 所属域:

ini_set('session.cookie_path', '/');ini_set('session.cookie_domain', '.onmpw.com');ini_set('session.cookie_lifetime', '0');复制代码
  • 经过上面的步骤就可以实现不同二级域名的单点登录与退出。

  • 不过还可以再简化,如确保 sessionId 相同就可以实现不同二级域名的单点登录与退出。

  • 参考文章: https://www.onmpw.com/tm/xwzj/network_145.html

2、不同域之间如何实现单点登录 - CAS

假设我们需要在以下这些站之间实现单点登录

  • www.onmpw1.com

  • www.onmpw2.com

  • www.onmpw3.com

上面的方案就行不通了。

目前 GitHub 上有开源的 SSO 解决方案,实现原理与主流 SSO 差不多:Https://github.com/jasny/sso

核心原理:

  • 客户端访问不同的子系统,子系统对应的 SSO 用户服务中心使用相同的 SessionId

  • 子系统 Broker 与 Server 间通过 attach 进行了授权链接绑定

同根域名不指定 domain 根域名,第一次授权需要每次都要跳转到授权服务,但是指定了domain, 同根域名只要有一个授权成功,都可以共用那个 cookie 了,下次就不用再授权了,直接就可以请求用户信息了。

第一次访问A:

PHP中实现SSO单点登录的方法

第二次访问B:

PHP中实现SSO单点登录的方法

2.1 登录状态判断

用户到认证中心登录后,用户和认证中心之间建立起了会话,我们把这个会话称为全局会话。当用户后续访问系统应用时,我们不可能每次应用请求都到认证中心去判定是否登录,这样效率非常低下,这也是单WEB应用不需要考虑的。

我们可以在系统应用和用户浏览器之间建立起局部会话,局部会话保持了客户端与该系统应用的登录状态,局部会话依附于全局会话存在,全局会话消失,局部会话必须消失。

用户访问应用时,首先判断局部会话是否存在,如存在,即认为是登录状态,无需再到认证中心去判断。如不存在,就重定向到认证中心判断全局会话是否存在,如存在,通知该应用,该应用与客户端就建立起它们之间局部会话,下次请求该应用,就不去认证中心验证了。

2.2 退出

用户在一个系统退出了,访问其它子系统,也应该是退出状态。要想做到这一点,应用除结束本地局部会话外,还应该通知认证中心该用户退出。

认证中心接到退出通知,即可结束全局会话,用户访问其它应用时,都显示已登出状态。

需不需要立即通知所有已建立局部会话的子系统,将它们的局部会话销毁,可根据实际项目来。

感谢各位的阅读,以上就是“PHP中实现SSO单点登录的方法”的内容了,经过本文的学习后,相信大家对PHP中实现SSO单点登录的方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: PHP中实现SSO单点登录的方法

本文链接: https://www.lsjlt.com/news/297747.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP中实现SSO单点登录的方法
    这篇文章主要讲解了“PHP中实现SSO单点登录的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中实现SSO单点登录的方法”吧!SSO( Single Sign On ),即单点登录...
    99+
    2023-06-20
  • java单点登录(SSO)的实现
    单点登录(SSO):SSO是指在多个应用系统中个,用户只需要登陆一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一用户的登陆的机制。 SSO的实...
    99+
    2022-11-12
  • 聊聊基于Node实现单点登录(SSO)的方法
    以上就是聊聊基于Node实现单点登录(SSO)的方法的详细内容,更多请关注编程网其它相关文章!...
    99+
    2023-05-14
    SSO 单点登录 node
  • PHP SSO单点登录实现原理解析
    随着互联网的发展,人们在使用各种网站和应用程序的过程中常常遇到需要重新登录的问题,这不仅浪费了用户的时间,也给用户带来了不便。为了解决这个问题,SSO(Single Sign-On)单点登录技术应运而生。一、SSO单点登录的概念SSO(Si...
    99+
    2023-10-21
    PHP SSO (单点登录) 实现原理解析
  • PHP SSO单点登录的最佳实践方法和实施策略
    单点登录(Single Sign-On,简称SSO)是指用户只需要一次登录,就能够访问多个独立的应用系统,而无需再次进行认证的一种身份验证机制。对于企业内部或多应用系统的用户来说,SSO能够提高操作效率和用户体验,减少了重复登录的麻烦。在本...
    99+
    2023-10-21
    PHP SSO(单点登录) 实施策略
  • SpringBoot如何实现同域SSO(单点登录)
    目录如何实现同域SSO?代码实现依赖配置控制器拦截器实现界面单点登录,其实看起来不是很复杂,只是细节上的处理,单点区分有三种 同域SSO 同父域SSO ...
    99+
    2022-11-12
  • 实现SSO单点登录的步骤是什么
    这篇文章主要介绍“实现SSO单点登录的步骤是什么”,在日常操作中,相信很多人在实现SSO单点登录的步骤是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”实现SSO单点登录的...
    99+
    2022-10-19
  • 如何使用PHP实现高效稳定的SSO单点登录
    引言:随着互联网应用的普及,用户面临着大量的注册和登录过程。为了提高用户体验,并减少用户的注册和登录间隔,许多网站和应用开始采用单点登录(Single Sign-On,简称SSO)技术。本文将介绍如何使用PHP实现高效稳定的SSO单点登录,...
    99+
    2023-10-21
    PHP SSO 单点登录
  • 基于ASP.NET实现单点登录(SSO)的示例代码
    目录背景逻辑分析代码实现Service总结背景 先上个图,看一下效果: SSO英文全称Single Sign On(单点登录)。SSO是在多个应用系统中,用户只需要登录一次就可以访...
    99+
    2022-11-13
  • springboot 集成cas5.3 实现sso单点登录详细流程
    什么是单点登录? 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所...
    99+
    2022-11-12
  • 如何实现Spring+ Spring cloud + SSO单点登录应用认证
    今天就跟大家聊聊有关如何实现Spring+ Spring cloud + SSO单点登录应用认证,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。不同系统的无缝隙集成,统一的sso单点登...
    99+
    2023-06-05
  • PHP SSO单点登录与用户体验的完美结合
    随着互联网的迅速发展,人们在使用各种网站和应用时需要频繁地注册和登录,不仅浪费了用户的时间和精力,还容易导致用户忘记账号和密码。为了解决这个问题,单点登录(Single Sign-On,简称SSO)技术应运而生。在多个相关网站或应用之间共享...
    99+
    2023-10-21
    PHP 用户体验 SSO (单点登录)
  • 详解PHP SSO单点登录的优势和应用场景
    随着互联网的快速发展和应用增多,用户需要同时登录多个网站或应用的情况也越来越普遍。这就带来了一个问题:如果每个网站都要求用户进行登录,用户需要记住多个账号和密码,不仅麻烦而且容易忘记。为了解决这个问题,单点登录(Single Sign-On...
    99+
    2023-10-21
    提高安全性
  • PHP SSO单点登录在多系统集成中的实际应用案例
    引言:随着互联网的快速发展和用户需求的增长,越来越多的网站和应用程序需要实现用户单点登录(SSO)功能。PHP作为一种广泛应用的服务器端脚本语言,具有灵活、简单和易于集成的特点,成为了许多开发者选择的首选。本文将介绍一个基于PHP的单点登录...
    99+
    2023-10-21
    PHP SSO 多系统集成
  • 面向企业级应用的PHP SSO单点登录解决方案探讨
    随着企业级应用的日益增多,用户不再满足于使用单个应用进行工作和生活。相反,他们希望能够集成多个应用,并且只需登录一次,即可访问所有关联的应用。在这种情况下,单点登录(SSO)就成为了一个非常重要的解决方案,它可以提供一种无缝的用户认证和访问...
    99+
    2023-10-21
    企业级应用 PHP SSO (单点登录) 解决方案探讨
  • 探讨PHP SSO单点登录的安全性与漏洞防范
    一、介绍随着互联网的发展,越来越多的网站实现了用户身份验证功能。但是,用户每次登录不同的网站都需要输入账号和密码,既不方便又容易遗忘。为了解决这个问题,单点登录(Single Sign-On,简称SSO)应运而生。SSO是一种解决多个网站用...
    99+
    2023-10-21
    PHP 安全性 SSO
  • Android端实现单点登录的方法详解
    前言 单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信...
    99+
    2022-06-06
    方法 单点登录 Android
  • 优化PHP SSO单点登录的性能和可扩展性的实用技巧
    随着互联网的发展,越来越多的网站和应用程序采用单点登录(SSO)来提供便捷的用户登录体验。在PHP开发中,单点登录的实现通常涉及到多个系统之间的会话管理和用户认证。然而,如果不加以优化,这种系统架构可能会面临性能瓶颈和扩展性问题。本文将介绍...
    99+
    2023-10-21
    PHP优化 SSO单点登录 性能可扩展性
  • GoLang jwt无感刷新与SSO单点登录限制解除的方法是什么
    这篇文章主要介绍了GoLang jwt无感刷新与SSO单点登录限制解除的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇GoLang jwt无感刷新与SSO单点登录限制解除的方法是什...
    99+
    2023-07-05
  • 深入理解PHP SSO单点登录的工作原理和技术机制
    随着互联网的快速发展,各种网站和应用的数量也日益增多。用户为了访问不同的网站和应用,需要分别注册不同的账号和密码,给用户带来了不便和烦恼。为了解决这个问题,单点登录(Single Sign-On,SSO)应运而生。SSO是一种授权认证系统,...
    99+
    2023-10-21
    PHP SSO 单点登录
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作