如何将每个请求的 WordPress 用户身份验证数据代理到同一域中的另一台服务器?

How to proxy per-request WordPress user authentication data to another server in the same domain?

我使用 WordPress 作为用户管理的前端,处理注册、登录、身份验证和注销。用户使用 WordPress 注册和登录。

该站点有 URL 由同一域中的后端 mod_perl 服务器提供服务。 当用户单击代理到后端服务器的 link 时,我希望前端服务器(代理)将经过身份验证的用户名或登录凭据传递到后端服务器。后端服务器将使用这些凭据进行授权。 我可以想出几种方法来做到这一点。

  1. 可能后端服务器从WordPress中读取了用户名 曲奇饼。 Cookie HTTP Header 在后端服务器可见 日志(我有意将其配置为调试辅助工具。)是吗 可能这样做,一台服务器读取另一台服务器写入的cookie 服务器(在同一个域中)?

    前端 WordPress 服务器可能会写入经过身份验证的用户名 进入一个环境变量,mod_rewrite 将附加到 URL 代理到后端服务器。也许使用 WordPress 插件, 但我没有找到这样的。

    WordPress SSO/OAuth 可能可行,但我的 OS X El Capitan 开发环境提出了另一层挑战 那.

前端是Apache2.4,PHP5.5.34,WordPress 4.5.3。 Apache 模块可以作为 DSO 添加和删除。后端是 Apache 2.4,mod_perl 2.0.10,MySQL 5.7。

两台服务器 运行 在同一个 AWS 实例 运行ning AWS Linux 中。 (我开始认为 AWS Linux 对我来说是错误的选择,但那是另一个话题。)

我掌握 Apache、MySQL 和 Perl 技能。 PHP和Javascript没学过

最简单的方法(也许也是唯一可行的方法)是使用PHP,因为wordpress 是一个PHP 应用程序,这对您来说确实是个问题。不过,我有一个简单的例子给你:

PHP 您的 wordpress 网站上的页面:

<?php
require('path/to/wp-blog-header.php');

if (is_user_logged_in()) {
    $user = wp_get_current_user();
    header("Location:backend.php?user=".$user);
    exit();
} else {
    echo "User is not logged in!";
};
?>

PHP 后端服务器上的页面:

<?php
if (isset($_GET['user'])) {
    $user = $_GET['user'];
    // do something with $user.
} else {
    echo "No user passed!";
}
?>

这只是使用了 Wordpress 的两个内置函数。首先调用 is_user_logged_in() function is used to determine whether a user is logged in. If the function returns true, the wp_get_current_user() 函数,使用 GET 方法将用户名传递给后端服务器的 php 页面。然后后端服务器验证传递的变量。

请注意,这个简单的过程仅供参考,非常不安全!