Adobe Analytics Segments API 身份验证问题与 node.js 客户端



我在尝试通过节点.js客户端使用分段 API 时遇到授权问题。 停止绕圈子,在通过 x-wsse 标头管理 POST 请求和授权的部分下方:

var now = new Date();
var options = {
method: "POST",
hostname: "api3.omniture.com",
path: "/admin/1.4/rest/?method=Segments.Get",
json: true,
headers: {
"Content-Type": "application/json",
"Content-Length" : Buffer.byteLength(JSON.stringify(body)),
"x-wsse": 'UsernameToken Username="[username]:[company]", PasswordDigest="xxxxxxxxxxxxxxxxxxxxxxxxxx==", Nonce="yyyyyyyyyyyyyyyyyyyyyyyyyy", Created="'+now+'"'
}
};

如您所见,我正在尝试复制 API 资源管理器生成的 x-wsse,通过 Date(( JS 类动态指定创建的 timetap。 节点客户端向我报告此错误:
{"错误":"错误请求","error_description":"无法验证身份验证.","error_uri":null}

我想 x-wsse PasswordDigest 和 Nonce 值在每个请求时也会不断变化,而在这里我将它们放在静态。 如果这是问题的原因,如何在 x-wsse 标头中动态插入这些参数?

多谢。

是的,PasswordDigestCreated值也是动态生成的,因为它们基于您生成的值。 我不了解node.js足以向您展示一个node.js示例,但这里有一个php示例,其中包含一些注释:

$username='user:company';
$secret='12345'; // api shared secret key for the user
// The nonce should be a universally unique value. I use a timestamp based value and prefix with a namespace to help make it unique, because AA request digests have to be unique across everybody everywhere ever
$nonce = 'FOO_'.dechex(time());
// datetime stamp in ISO 8601 date format (e.g. '2004-02-12T15:19:21+00:00')
$nonce_ts = date('c');
// Adobe expects the PasswordDigest to be a concatenated string value of the nonce, datetimestamp, and api key. They expect it to be hashed (sha1) and then base64 encoded
$digest = base64_encode(sha1($nonce.$nonce_ts.$secret));
$server = "https://api.omniture.com";
$path = "/admin/1.4/rest/";
$rc=new SimpleRestClient();
$rc->setOption(CURLOPT_HTTPHEADER, array("X-WSSE: UsernameToken Username="$username", PasswordDigest="$digest", Nonce="$nonce", Created="$nonce_ts""));

最新更新