2017-07-24 7 views
0

Ich stehe vor einem Autorisierungsproblem, das versucht, Segment-APIs über einen node.js-Client zu verwenden. Stopp Umschweife, der es unter dem Teil, der die POST-Anforderung und die Genehmigung über den x-wsse Header verwaltet:Adobe Analytics Segmente API-Auth-Problem mit node.js-Client

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+'"' 
    } 
}; 

Wie Sie sehen, ich versuche, die x-wsse erzeugt durch zu replizieren der API-Explorer, der den Created-Zeitschritt über die JS-Klasse Date() dynamisch angibt. Knoten Client meldet mir diesen Fehler:
{ "Fehler": "Bad Request", "ERROR_DESCRIPTION": "Kann nicht Authentifizierung validieren.", "Error_uri": null}

nehme ich die x- Wsse PasswordDigest und Nonce Werte ändern sich auch bei jeder Anfrage kontinuierlich, während ich sie hier statisch setze. Wenn dies der Grund für das Problem war, wie dynamisch auch diese Parameter in den X-Wssee-Header einfügen?

Vielen Dank.

Antwort

2

Ja, die Werte PasswordDigest und Created werden ebenfalls dynamisch generiert, da sie auf dem von Ihnen generierten Wert basieren. Ich weiß nicht, node.js gut genug, um Ihnen ein node.js Beispiel zu zeigen, aber hier ist ein PHP-Beispiel für das, was ich tue, mit einigen Bemerkungen:

$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\"")); 
+0

@RiccardoMalesani btw sieht aus wie Adobe a hat [ node sdk] (https://github.com/Adobe-Marketing-Cloud/marketing-cloud-node-sdk), die hilfreich sein könnten, um sie zu referenzieren (oder einfach zu verwenden ... nicht sicher, was deine ultimative Situation ist!) –