You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress登录后通过URL向第三方平台发送JWT Token实现SSO

实现WordPress登录后向第三方平台发送JWT Token完成SSO

场景说明

  • 配置的SSO登录URL:https://mywordpressite.com/login
  • 发起请求时会附加returnurl参数,示例格式:https://mywordpresssite.com/login&returnurl=https://nonwordpresssite.com/mycourses
  • WordPress登录成功后,需重定向至目标URL:https://nonwordpresssite.com/mycourses?ssoToken=

核心需求

实现WordPress登录后向另一平台发送JWT Token以完成SSO。


实现步骤

1. 监听WordPress登录成功事件

利用WordPress原生的wp_login钩子,在用户登录完成后触发自定义逻辑:

add_action('wp_login', 'handle_sso_jwt_redirect', 10, 2);
function handle_sso_jwt_redirect($user_login, $user) {
    // 后续SSO逻辑写在此处
}

2. 提取并验证returnurl参数

从请求中获取returnurl,同时做域名合法性校验,避免开放重定向漏洞:

$return_url = isset($_GET['returnurl']) ? esc_url_raw($_GET['returnurl']) : home_url('/');

// 限定允许跳转的第三方平台域名
$allowed_domains = ['nonwordpresssite.com'];
$parsed_target = parse_url($return_url);
if (!isset($parsed_target['host']) || !in_array($parsed_target['host'], $allowed_domains)) {
    $return_url = home_url('/');
}

3. 生成JWT Token

使用firebase/php-jwt库(通过Composer安装:composer require firebase/php-jwt)生成包含用户信息的Token:

require_once get_stylesheet_directory() . '/vendor/autoload.php';
use Firebase\JWT\JWT;

// 替换为双方约定的安全密钥
$jwt_secret = 'your_strong_unique_secret_key';
$payload = [
    'iss' => 'https://mywordpressite.com', // 签发方标识
    'sub' => $user->ID, // WordPress用户ID
    'email' => $user->user_email,
    'exp' => time() + 1800 // Token有效期(30分钟)
];

$jwt_token = JWT::encode($payload, $jwt_secret, 'HS256');

4. 重定向至第三方平台并携带Token

将生成的Token拼接到目标URL的ssoToken参数中,完成跳转:

$sso_redirect_url = add_query_arg('ssoToken', $jwt_token, $return_url);
wp_redirect($sso_redirect_url);
exit;

5. 安全注意事项

  • 全程使用HTTPS传输,防止Token被明文窃取
  • JWT密钥需足够复杂,且仅在WordPress和第三方平台之间共享
  • 严格校验returnurl的域名范围,禁止跳转到未授权站点
  • 根据业务需求合理设置Token有效期,避免长期有效带来的风险

内容的提问来源于stack exchange,提问作者Zeel Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:15:41