当前位置:首页 > PHP

php单点登录实现

2026-04-03 09:21:02PHP

PHP 单点登录实现方案

单点登录(SSO)允许用户通过一次登录访问多个关联系统。以下是几种常见的PHP实现方法:

基于共享Session的方案

在同一个主域名下的子域之间共享Session,需在php.ini中配置:

session.cookie_domain = .example.com

代码示例:

// 设置跨子域的Session
ini_set('session.cookie_domain', '.example.com');
session_start();
$_SESSION['user'] = $userInfo;

基于Token的方案

  1. 认证中心生成Token:

    $token = bin2hex(random_bytes(32));
    $_SESSION['sso_token'] = $token;
    setcookie('sso_token', $token, 0, '/', '.example.com');
  2. 子系统验证Token:

    if (isset($_COOKIE['sso_token']) && $_COOKIE['sso_token'] === $_SESSION['sso_token']) {
     // 已登录
    }

基于OAuth2的实现

使用league/oauth2-client库:

require 'vendor/autoload.php';

$provider = new \League\OAuth2\Client\Provider\GenericProvider([
    'clientId' => 'your_client_id',
    'clientSecret' => 'your_client_secret',
    'redirectUri' => 'https://your-app.com/callback',
    'urlAuthorize' => 'https://sso-server.com/oauth/authorize',
    'urlAccessToken' => 'https://sso-server.com/oauth/token',
    'urlResourceOwnerDetails' => 'https://sso-server.com/oauth/userinfo'
]);

跨域解决方案

对于完全不同的域名,可以使用:

  • 中央认证页面跳转
  • 隐藏iframe通信
  • 使用postMessage API

示例postMessage实现:

php单点登录实现

// 子系统接收消息
window.addEventListener('message', function(event) {
    if (event.origin === 'https://sso-server.com') {
        localStorage.setItem('sso_token', event.data.token);
    }
});

安全注意事项

  • 所有Token必须设置有效期
  • 使用HTTPS传输敏感数据
  • 实现CSRF防护机制
  • 定期轮换加密密钥

完整流程示例

  1. 用户访问app1.example.com
  2. 系统检查本地Session,若无则重定向到sso.example.com
  3. 认证中心验证用户身份后生成Token
  4. 重定向回原系统并附带Token参数
  5. 原系统向认证中心验证Token有效性
  6. 建立本地Session并完成登录

可以根据具体需求选择适合的方案组合实现。

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

相关文章

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或p…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…

php无法实现

php无法实现

PHP 是一种功能强大的服务器端脚本语言,能够实现多种功能,包括动态网页开发、数据库交互、文件操作等。如果遇到“无法实现”的问题,通常是由于以下原因之一: 环境配置问题 确保 PHP 环境正确安装和…

php实现异步图片上传

php实现异步图片上传

异步图片上传的实现方法 在PHP中实现异步图片上传通常需要结合前端JavaScript和后端PHP代码。以下是几种常见的方法: 使用XMLHttpRequest或Fetch API 前端使用Java…