2016-09-29 15 views
1

Documentibデータベースなし)を使用せずにデータを取得したいのですが、これはIonic Appに実装する必要があるためです。Postman出力のDocumentDB REST API

私はマイクロソフトのthisのドキュメントに続き、このドキュメントのコードと全く同じコードを使用しています(Browserify)。

接続をテストするために、私はすべての必要なヘッダを入力するPostmanを使用します。 master-keyについては、primary-keyをDocumentDBから使用しました。

{ 
    "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: 'post\ndbs\n\nthu, 29 sep 2016 10:46:49 gmt\n\n'\r\nActivityId: f7ce147d-6ff9-4e4f-aaff-39d3769cc399" 
} 

は私が間違って何をやっている:

問題はDocumentDBからの応答は次のよう常にであること、ありますか?

JSは、次のようになります。

var Buffer = require('buffer/').Buffer; 
var crypto = require("crypto"); 
var headers = new Array(); 
headers['x-ms-date'] = "Thu, 29 Sep 2016 17:50:49 GMT"; 

function getAuthorizationTokenUsingMasterKey(verb, resourceType, resourceId, headers, masterKey) { 
    var key = new Buffer(masterKey, "base64"); 

    var text = (verb || "").toLowerCase() + "\n" + 
      (resourceType || "").toLowerCase() + "\n" + 
      (resourceId || "") + "\n" + 
      (headers["x-ms-date"] || "").toLowerCase() + "\n" + 
      "" + "\n"; 

    var body = new Buffer(text, "utf8"); 
    var signature = crypto.createHmac("sha256", key).update(body).digest("base64"); 
    var MasterToken = "master"; 
    var TokenVersion = "1.0"; 

    return "type=" + MasterToken + "&ver=" + TokenVersion + "&sig=" + signature; 
} 
console.log(getAuthorizationTokenUsingMasterKey("POST", "docs", "test_collection_1", headers, "CJTR8odBZJklUUixWPZDRdTXqJrfLpfhTLk...wO2oPHgPyjuBkbhrjTlvKhRxsAAeig==")); 

そしてポストマンの私のヘッダは以下のようになります。

POST request to https://example-database.documents.azure.com/dbs 

x-ms-documentdb-isquery: True 
x-ms-date: Thu, 29 Sep 2016 17:50:49 GMT 
authorization: type%3Dmaster%26ver%3D1.0%26sig%3D3240f1fa7a05...cf845c746bcbb5a1 
x-ms-version: 2015-12-16 
x-ms-query-enable-crosspartition: true 
Accept: application/json 
Content-Type: application/query+json 
+0

こんにちはJohnさん、まだ更新はありますか? –

+0

あなたはこれまでどのようにこれを見つけましたか?ここでも同様の問題があります。 – americanslon

答えて

0

あなただけのAzureが提供するノードからコードを取得し、適応することがあります。 js SDK for DocumentDB。 https://github.com/Azure/azure-documentdb-node/blob/master/source/lib/auth.js

+0

ありがとうございますが、私はこのコードを使ってnode.jsを防ぐために既にそれを適用しましたが、うまくいきません。 –

+0

私はBrowserifyをインストールしたので、あなたのリンクから全く同じコードを使用しています(私は私の質問を更新しました)。しかし、応答メッセージは常に同じです –

+0

Browserifyには、暗号パッケージ用のpolyfilが必要です。それが違いなのだろうかと思っています。実際のコードをnode.jsで実行し、出力を出力してみてください。次に、同じキーを使用して、ブラウズされたバージョンまたは元のバージョンの出力をプリントアウトします。 –

0

「text」変数が、「サーバーが次のペイロードを使用して署名しました:」の後のエラーで返されたペイロードと正確に一致するかどうかを確認する必要があります。ペイロードの「resourceId」部分にあるこの人物と同様のエラーが表示されているようです:DocumentDB - DELETE causes 401 errorたとえば、上記の例のように、フルリソースリンクではなくドキュメント名だけを使用しています。その質問に対する私の答えを見てください。正しい方法を説明する必要があります。

0

あなたのエラーメッセージによれば、あなたの認証署名は、あなたがアプローチしようとしたDocumentDBのリソースと一致しませんでした。 PostManを使用して接続をテストするには、Document DBのREST APIに対して正しいHttp要求を実装する必要があります。

E.G.

https://msdn.microsoft.com/en-us/library/azure/mt489065.aspxを介してDocumentDBにDBをリストすることができます。

console.log(getAuthorizationTokenUsingMasterKey("GET", "dbs", "", headers, "{your_key}")); 

そしてポストマンで:

を経由して認証ヘッダーを生成しDocumentDB残りのAPIに対して認証トークンを生成する方法について

GET request to https://example-database.documents.azure.com/dbs 
x-ms-date: Thu, 29 Sep 2016 17:50:49 GMT 
authorization: type%3Dmaster%26ver%3D1.0%26sig%3D.... 
x-ms-version: 2015-08-06 

を、あなたは、詳細についてはhttps://msdn.microsoft.com/library/azure/dn783368.aspxを参照することができます。

関連する問題