在CURLOPT_HTTPHEADER上分配php变量
我正在尝试测试OpenAM REST API的身份验证和注销功能。然而,我遇到了一个问题 身份验证API方法工作正常。但是,我似乎无法处理注销API方法。我认为这与在CURLOPT_HTTPHEADER中插入令牌ID密钥有关。我把一个字符串放在一个php变量中,并试图把它放在CURLOPT_HTTPHEADER中 对于身份验证方法来说,它工作得很好。但是,不适用于注销: ==================================================================================================在CURLOPT_HTTPHEADER上分配php变量,php,curl,openam,Php,Curl,Openam,我正在尝试测试OpenAM REST API的身份验证和注销功能。然而,我遇到了一个问题 身份验证API方法工作正常。但是,我似乎无法处理注销API方法。我认为这与在CURLOPT_HTTPHEADER中插入令牌ID密钥有关。我把一个字符串放在一个php变量中,并试图把它放在CURLOPT_HTTPHEADER中 对于身份验证方法来说,它工作得很好。但是,不适用于注销: ===============================================================
$cg = curl_init("http://openam.example.com:8080/openam/json/authenticate");
curl_setopt($cg, CURLOPT_CUSTOMREQUEST, "POST");
// curl_setopt($cg, CURLOPT_HTTPHEADER, array('X-OpenAM-Username: amuser', 'X-OpenAM-Password: ampwd', 'Content-Type: application/json'));
$ampwd = "ampwd";
curl_setopt($cg, CURLOPT_HTTPHEADER, array('X-OpenAM-Username: amuser', 'X-OpenAM-Password: ' . "ampwd", 'Content-Type: application/json'));
curl_setopt($cg, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cg, CURLOPT_HEADER, true);
$output = curl_exec($cg);
if(!curl_errno($cg))
{
$info = curl_getinfo($cg);
echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
}
else
echo "fail";
// curl_close($cg);
echo "<pre>";
print_r($output);
echo "</pre>";
$tokenId = preg_match_all('/\{(.*?)\}/', $output, $match);
echo "<pre>";
print_r($match);
echo "</pre>";
$tokenId = preg_match_all('/\"(.*?)\"/', $match[1][0], $anothermatch);
echo "<pre>";
$tokenIdTitle = $anothermatch[1][0];
$tokenIdValue = '"' . $anothermatch[1][1] . '"';
$successUrlTitle = $anothermatch[1][2];
$successUrlValue = $anothermatch[1][3];
echo "</pre>";
$ch = curl_init("http://openam.example.com:8080/openam/json/sessions/?_action=logout");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", 'iplanetDirectoryPro: ' . $tokenIdValue));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_exec($ch);
$output = curl_exec($ch);
if(!curl_errno($ch))
{
$info = curl_getinfo($ch);
echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
}
else
echo "fail";
echo "<pre>";
print_r($output);
echo "</pre>";
curl_close($ch);
?>
在调用注销curl之前,是否也可以打印变量
$tokenIdValue
?我猜它没有正确分配。注销调用实际上不需要“json”内容类型。。。文档$curl--request POST--header“iplanetDirectoryPro:AQIC5wM2…U3MTE4NA..*”中的示例https://openam.example.com:8443/openam/json/sessions/?_action=logout“{”结果“:“已成功注销”}
如果更改了OpenAM cookie跟踪名称,则不能使用默认的“iPlanetDirectoryPro”头。如果未更改默认值,则可以进行网络跟踪以验证是否传输了标头,并检查OpenAM日志以验证是否可以在服务器端找到关联的SSO sesion。还请注意,您正在使用所谓的“零页登录”(用于身份验证)。。。确保您知道这意味着如果您更改OpenAM身份验证配置。我已经解决了这个问题。您必须在curl方法中用引号括起$tokenIdValue:例如curl_setopt($curl,CURLOPT_HTTPHEADER,array('iplanetDirectoryPro:'。“$tokenIdVal”,'Content type:application/json');
Took 0.032 seconds to send a request to http://openam.example.com:8080/openam/json/authenticate
HTTP/1.1 200 OK
Set-Cookie: amlbcookie=01; Domain=.ufcfit.com; Path=/
Date: Thu, 30 Oct 2014 01:59:24 GMT
Accept-Ranges: bytes
Server: Restlet-Framework/2.1.7
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
{"tokenId":"AQIC5wM2LY4Sfcyv1r3DrnDThcw3mMH7GbcKKb0E8UIfGEo.*AAJTSQACMDEAAlNLABQtNTAxMDIyNTMxNjAzNDE0ODkwMg..*","successUrl":"/openam/console"}
Array
(
[0] => Array
(
[0] => {"tokenId":"AQIC5wM2LY4Sfcyv1r3DrnDThcw3mMH7GbcKKb0E8UIfGEo.*AAJTSQACMDEAAlNLABQtNTAxMDIyNTMxNjAzNDE0ODkwMg..*","successUrl":"/openam/console"}
)
[1] => Array
(
[0] => "tokenId":"AQIC5wM2LY4Sfcyv1r3DrnDThcw3mMH7GbcKKb0E8UIfGEo.*AAJTSQACMDEAAlNLABQtNTAxMDIyNTMxNjAzNDE0ODkwMg..*","successUrl":"/openam/console"
)
)
Took 0.015 seconds to send a request to http://openam.example.com:8080/openam/json/sessions/?_action=logout
HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=ISO-8859-1
Content-Length: 69
Date: Thu, 30 Oct 2014 01:59:24 GMT
{ "code": 401, "reason": "Unauthorized", "message": "Access Denied" }