当前位置:首页 > 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实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…

php数组实现

php数组实现

PHP 数组的基本实现 PHP 数组是一种非常灵活的数据结构,可以存储多个值,并且支持多种类型的键(整数或字符串)。PHP 数组实际上是有序映射(ordered map),可以看作是列表(vector…

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…

php session实现购物车

php session实现购物车

PHP Session 实现购物车 初始化 Session 确保在使用 Session 前调用 session_start() 函数。通常放在 PHP 文件的最顶部。 <?php sessio…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…