我们目前正在实施一个新的 OpenSSO 服务器。该服务器与 Web 服务器位于不同的服务器上,我无法在我们的 PHP Web 服务器上进行身份验证。
使用 openSSO 令牌设置的 cookie 称为 iPlanetDirectoryPro。这是从 authServer.company.com 设置的。我需要从 webserver.company.com 读取此内容,然后向 authserver.company.com 发送 HTTPRequest 以检索该 OpenSSO 令牌的属性。
目前我的代码看起来像这样,但它不起作用,我怀疑是由于没有正确读取 cookie。
$url = 'http://authServer.company.com:8080/opensso/identity/attributes';
$r = new HttpRequest();
$r->setURL($url);
$r->setMethod(HTTP_METH_POST);
$valarray = array(
'Host' => 'authServer.company.com',
'Content-Type' => 'application/x-www-form-urlencoded',
'Cookie' => "iPlanetDirectoryPro=$_COOKIE[iPlanetDirectoryPro]"
);
$r->addHeaders($valarray);
var_dump($r);
var_dump($valarray);
#
# request
#
print "<br/>";
print "<b>what i'm saying to the server</b>";
print "<pre>";
#print "iPlanetDirectoryPro cookie: $_COOKIE[iPlanetDirectoryPro]";
print $r->getRawRequestMessage();
print "</pre>";
print "iPlanetDirectoryPro cookie: $_COOKIE[iPlanetDirectoryPro]";
$r->send();
#
# response
#
print "<b>what the server is telling me</b>";
print "<pre>";
$response_body = $r->getResponseBody();
print $response_body;
print "</pre>";
有什么想法吗?我会以错误的方式解决这个问题吗?
更新- 所以我发现的底线是服务器根本无法读取 cookie,因为它来自另一台服务器。作为一项工作,我实现了一个允许用户从网络服务器提交登录页面的 REST API。它发送到 AuthServer 并返回响应。响应通常应该是一个令牌,除非它无效。如果它是一个令牌,则使用其中的令牌创建一个新的 cookie,以便应用程序可以使用该令牌与 authserver 通信,但 cookie 位于 webservers 域下