LoginSignup
3
2

More than 5 years have passed since last update.

Check! Azure DocumentDB REST API のユーザー取得で署名が一致しない場合の対処

Posted at

こんにちは、オークファンの @dz_ こと大平かづみです。

Prologue - はじめに

Azure DocumentDB は、ドキュメントの他に「ユーザー」も扱うことができます。

そこで PHP から REST API を使って利用したところ、 ユーザーの取得時に「MAC 署名が一致しない」というエラーが発生し、しばらく悩みました。

解決方法がわかったので、ご紹介します。

エラー内容

今回、MAC署名が一致しないエラーが発生したのは、以下の users取得 するURIでした。

エラーを確認した URI

エラーの内容

{
  "code": "Unauthorized",
  "message": "Message: {\"Errors\":[\"The MAC signature found in the HTTP request is not the same as the computed signature. Server used following string to sign - 'get\\nusers\\xxxxxxx==\\nwed, 22 jun 2016 05:00:38 gmt\\n\\n'\"]}\r\nActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, Request URI: /apps/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/services/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/partitions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/replicas/xxxxxxxxxxxxxxxxxxx"
}

ちなみに、取得は失敗するが、書込みは成功します。また、他の dbs colls docs の取得や書込みは、問題ありません。

原因

今回のエラーの原因は、使うキーの選択が誤っていました。

どういうことかといいますと、DocumentDB には、下図のようにマスターキーの他に、 読み取り専用キー があります。
20160622_documentdb_001.png

私は読み取りの時にはこの 読み取り専用キー を利用しています。

が、しかし!

ユーザーの取得については、読み取り専用キーではなく マスターキー を用いなければならないことがわかりました。

なお、キーの詳細に関しては、 DocumentDB のデータへのアクセスをセキュリティで保護する方法 をご参照ください。

対処

ということで、ユーザーの取得(一覧、単体)では、 マスターキー を使いましょう。

Epilogue - おわりに

調べていると、リソーストークンというものも便利そうです。適材適所で利用できるよう工夫してみます。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2