2

Set Blob Properties API (http://msdn.microsoft.com/en-us/library/windowsazure/hh452235) への単純な REST 呼び出しを行って、ログのオン/オフを切り替えようとしています。BLOB プロパティを取得するための REST API 呼び出しが正常に機能するようになったので、ハッシュ アルゴリズム、ヘッダー設定、および認証署名の作成が機能することはわかっていますが、プロパティの設定側では機能していないようです。認証ヘッダーでエラーが発生し続けるので、そこで何かをしていないことがわかります。

作成中のものを下にコピーし、最終的にハッシュして認証ヘッダー文字列に入れました。オンライン ドキュメント (http://msdn.microsoft.com/en-us/library/windowsazure/dd179428) は、この特定の種類の BLOB 要求に絶対に必要なフィールドを特定するのに実際には役立ちません。それらのほとんどを入力しますが、入力内容に関係なく、違いの応答が得られないようです。共有キーライト認証も試しました。これは、はるかに軽量であるため推奨されますが、そうではありませんこれらの5つのフィールドすべてに入力すると、どちらかが機能するようです。

Blob Services の共有キー認証:

PUT\n \n \n 130\n (MD5_CONTENT_HASH) \n \n \n \n \n \n \n x-ms-date:Tue, 19 Jun 2012 19:53:58 GMT\n x-ms-version:2009-09-19\n /(MY_ACCOUNT)/\n comp:properties\n restype:service

ここで私が見逃している明らかなものはありますか?値 (MD5_CONTENT_HASH) と (MY_ACCOUNT) はもちろん、リクエスト呼び出しを行うときに入力されます。プロパティを「GET」するための同様のリクエスト呼び出しは、送信時に正常に機能します。これとの唯一の違いは、コンテンツの長さとともに MD5_content を送信していることです。ただし、ここで明らかな何かが欠けている可能性があります。

どんなアドバイスでも大歓迎です!前もって感謝します。-ヴィンセント

詳細情報を編集:

使用しているプログラミング言語: Objective-C (iOS iPhone)

また、リクエストを行うために ASIHTTPRequest を使用しています。リクエスト setRequestMethod:@"PUT" を定義するだけで、リクエストの本文を作成し、それを NSData に変換して長さを計算します。appendPostData メソッドを介してリクエスト本文データをリクエストに添付します。次に、上記の認証文字列を作成し、全体をハッシュして、「Authorization」というヘッダーとしてリクエストに添付します。

私が使用しているリクエストボディ文字列:

<?xml version=\"1.0\" encoding=\"utf-8\"?><StorageServiceProperties><Logging><Version>1</Version></Logging></StorageServiceProperties>

これが不完全なリクエスト ボディであることはわかっていますが、完全な XML の作成に進むまで、「リクエスト ボディ要素がありません」などのエラーが発生するのを待つつもりでした。(それは私の問題でしょうか?)

サーバーから取得したエラー:

<?xml version="1.0" encoding="utf-8"?><Error><Code>AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:accc4fac-2701-409c-b1a7-b3a528ce7e8a
Time:2012-06-20T14:36:50.5313236Z</Message><AuthenticationErrorDetail>The MAC signature found in the HTTP request '(MY_HASH)' is not the same as any computed signature. Server used following string to sign: 'POST


130








x-ms-date:Wed, 20 Jun 2012 14:36:50 GMT
x-ms-version:2009-09-19
/(MY_ACCOUNT)/
comp:properties
restype:service'.</AuthenticationErrorDetail></Error>

奇妙なのは、認証署名に渡したパラメーターの数に関係なく、サーバーから返されるエラーがそのように見えることです。

ご協力いただきありがとうございます。

4

1 に答える 1

1

署名された文字列とエラー メッセージを比較すると、POST 要求を送信しているが、PUT を送信しているかのように署名していることがわかります。

于 2012-06-20T16:12:16.060 に答える