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

时间:2016-07-14 07:58:02

标签: wordpress oauth-2.0 http-authentication mod-perl

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

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

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

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

    WordPress SSO / OAuth可能是可能的,但我的OS X El Capitan 发展环境给人们带来了另一层挑战 这一点。

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

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

    我有Apache,MySQL和Perl技能。我从未学过PHP和Javascript。

1 个答案:

答案 0 :(得分:0)

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

WordPress网站上的

PHP页面:

<?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&#39;内置功能。首先,is_user_logged_in()函数用于确定用户是否已登录。如果函数返回true,则调用wp_get_current_user()函数将用户名传递给后端服务器的php页面使用GET方法。然后后端服务器验证传递的变量。

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