2016-05-08 11 views
1

Ich habe das folgende Problem beim Versuch, eine Verbindung zur DocumentDB Web API mit R und PostMan herzustellen.DocumentDB Web API-Zugriff mit R

In der DocumentDB-Dokumentation besteht die Möglichkeit, der Web-API etwas zu stellen darin, einen Autorisierungsheader mit base64-Hash zu erstellen.

In R versuche ich die Signatur zu berechnen und den Header direkt mit Briefträger zu testen. Aber ich bekomme jedes Mal ein http 401. Hier mein R-Code ist:

toHash <- enc2utf8("get\ncolls\ndbs/toto/colls/testtoto\nsun, 08 may 2016 06:43:05 gmt\n\n") 
hash <- hmac(key, toHash, "sha256") 
base64(hash) 

der „Schlüssel“ ist der Primärschlüssel aus dem Portal bekam. Und dann, nach der Azure-Dokumentation, mein Header ist:

type=master&ver=1.0&sig=< thebase64(hash) > 

ich, dass mit dem Header x-ms-Version, Datum und x-ms-date in PostMan einfügen.

Aber IT'IS nicht funktioniert ..

ich jetzt bin stecken, hat jemand eine Idee? Verwende ich eine falsche R-Funktion? Ein falscher Schlüssel, gibt es eine Möglichkeit, mehr Informationen über das Missverhältnis zu erhalten?

Die Web-api Antwort ist:

{ 
    "code": "Unauthorized", 
    "message": "The input authorization token can't serve the request. Please check that the expected payload is built as per the protocol, and check the key being used. Server used the following payload to sign: 'get\ncolls\ndbs/toto/colls/testtoto\nsun, 08 may 2016 06:43:05 gmt\n\n'\r\nActivityId: fadbfc0b-e298-418a-b56c-8114699fff91" 
} 

Antwort

1

ich gefunden, was von mir falsch war.

Das im Azure-Portal angegebene Token ist Base64-codiert. So Es ist obligatorisch, sie zu entschlüsseln:

RCurl::base64Decode(key, mode="raw") 

, um es mit der digest::hmac Funktion zu verwenden. Innerhalb dieser hmac Funktion muss auch raw = TRUE angegeben werden.