1

我们目前正在实施一个新的 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 域下

4

1 回答 1

0

显然 401 Token 为 null 表示您没有将令牌与请求一起发送(或者 OpenSSO 无法从请求中提取它)。如果我假设您已成功从客户端请求中获取 cookie,那么我建议您尝试将 cookie 值作为参数而不是标头传递。

参数将是 subjectid=token 值。

我建议使用 curl 进行测试以获取正确的请求形式 - 然后修改您的代码以匹配成功的 curl 请求

于 2010-08-12T06:54:31.327 回答