当前位置:首页 > PHP

php 实现单点登录

2026-02-13 13:53:12PHP

单点登录(SSO)实现原理

单点登录允许用户通过一次身份验证访问多个关联系统。核心原理是:

  • 用户登录后生成全局会话(如Token),其他系统通过验证该会话实现免登录。
  • 依赖中央认证服务(如独立的SSO服务器)协调各子系统。

PHP实现方案

基于Token的SSO流程

  1. 用户访问系统A
    系统A检查本地无有效会话,重定向到SSO服务器登录页。

  2. SSO服务器验证身份
    用户提交凭证,SSO服务器验证通过后生成Token,存储到缓存(如Redis),并返回Token给浏览器(通过Cookie或URL参数)。

  3. 系统A验证Token
    浏览器携带Token访问系统A,系统A向SSO服务器发起验证请求,确认Token有效后建立本地会话。

  4. 访问系统B
    用户访问系统B时,系统B同样重定向到SSO服务器。SSO服务器发现已有全局会话(通过浏览器Cookie),直接返回Token给系统B完成登录。

关键代码示例

SSO服务器生成Token(PHP)

// 生成Token并存储
$token = bin2hex(random_bytes(32));
$redis->setex("sso_token:$token", 3600, json_encode(['user_id' => 123]));

// 设置全局Cookie(跨域需考虑域名)
setcookie('sso_token', $token, time() + 3600, '/', '.example.com');

子系统验证Token(PHP)

// 从请求获取Token
$token = $_COOKIE['sso_token'] ?? $_GET['token'];

// 向SSO服务器发起验证请求
$response = file_get_contents("https://sso.example.com/verify?token=$token");
$data = json_decode($response, true);

if ($data['valid']) {
    $_SESSION['user'] = $data['user_id']; // 建立本地会话
}

跨域问题解决

  • Cookie跨域:设置Cookie域为父级域名(如.example.com),确保所有子系统可读取。
  • Token传递:通过URL参数或PostMessage(前端跨域通信)传递Token。

安全注意事项

  • 使用HTTPS保护Token传输。
  • Token设置较短有效期并支持吊销。
  • 防范CSRF(如验证Referer或添加CSRF Token)。

扩展方案

  • OAuth2/OpenID Connect:标准化协议,适合复杂场景(如第三方登录)。
  • SAML:企业级协议,需XML处理支持。

通过以上步骤,可实现基础的PHP单点登录系统,需根据实际需求调整验证逻辑和存储方式。

php 实现单点登录

标签: 单点php
分享给朋友:

相关文章

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTM…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…