4

RESTAPIを介してWindowsAzureストレージアカウントにアクセスしようとすると、認証に問題が発生します。

リクエストを生成する方法を決定するために、次のリソースを読みました。

http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx

http://convective.wordpress.com/2010/08/18/examples-of-the-windows-azure-storage-services-rest-api/

Azure Blob Service REST APIは403エラーを返します:「リクエスト日付ヘッダーが指定されていません」

私の理解では、リクエストには4つの変数しかありません。サービスエンドポイントを決定する実際のURI、GMT時間の現在の日付プライマリアクセスキーアカウント名。

最初の2つはMSDNリソースからのもので、残りの2つはWindowsAzureポータルからのものです。

GET http://<account_name>.table.core.windows.net/ HTTP/1.1
x-ms-date: Sun, 24 Feb 2013 09:19:31 GMT
x-ms-version: 2009-09-19
Authorization: SharedKey <account_name>:<primary_key>
Accept-Charset: UTF-8
Accept: application/atom+xml,application/xml
DataServiceVersion: 1.0;NetFx
MaxDataServiceVersion: 1.0;NetFx
Host: <account_name>.table.core.windows.net

アカウント名と主キーが正しいこと、および他の投稿からの提案に基づいてx-ms-dateタイムスタンプが15分以内であることを確認しました。

次の応答を受け取ります。

HTTP/1.1 403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
Content-Length: 437
Content-Type: application/xml
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: d78c2c11-8699-4737-9592-82813eac356e
Date: Sun, 24 Feb 2013 21:20:03 GMT

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code>AuthenticationFailed</code>
  <message xml:lang="en-US">Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:d78c2c11-8699-4737-9592-82813eac356e
Time:2013-02-24T21:20:03.2036675Z</message>
</error>

適切に認証するためのリクエストを修正するための提案はありますか?

また、Azure Storage Explorerユーティリティをダウンロードしてサービスにアクセスできたので、ストレージアカウントが有効で機能していることがわかりました。

4

5 に答える 5

4

さらに検索したところ、次の記事を見つけました。

  1. http://msdn.microsoft.com/en-us/library/windowsazure/dd135720.aspx
  2. http://blog.einbu.no/2009/08/authenticating-against-azure-table-storage/

基本的な結論は、このタイプのリクエストには SharedKeyLite を使用する必要があるということです。

リソース #1 には次のように書かれています。

テーブル サービスでは、各要求が認証される必要があります。Shared Key と Shared Key Lite 認証の両方がサポートされています。共有キー認証はより安全であり、REST API を使用してテーブル サービスに対して行われる要求に推奨されます。WCF Data Services 用の Microsoft .NET クライアント ライブラリは、Shared Key Lite 認証のみをサポートします。

1 つのリソース #2 では、ShareKeyLite の作成方法が説明されており、下部に次のように記載されています。

SharedKey は SharedKeyLite よりも堅牢であるため、当然の選択です。ただし、Development Table Storage にアクセスするには SharedKeyLite スキームが必要です。(Windows Azure SDK の 7 月の CTP の時点で。)

于 2013-02-27T08:24:45.440 に答える
1

私も同じ問題を抱えていました。AzureStorageExplorerユーティリティもダウンロードしました。そして、私はFiddler Web Debuggerを使用して、ユーティリティから紺碧へのリクエストを調べていました。リクエストは次のようになりました。

GET http://mystorageaccount.table.core.windows.net/Tables() HTTP/1.1
User-Agent: Microsoft ADO.NET Data Services
DataServiceVersion: 1.0;NetFx
MaxDataServiceVersion: 2.0;NetFx
x-ms-version: 2009-09-19
x-ms-date: Tue, 26 Feb 2013 07:18:04 GMT
Authorization: SharedKeyLite mystorageaccount:mystorageaccountkey
Accept: application/atom+xml,application/xml
Accept-Charset: UTF-8
Host: mystorageaccount.table.core.windows.net
于 2013-02-26T07:24:33.330 に答える
0

ここに記載されているソリューションを使用できます。

Azure テーブルにアクセスする際に注意すべきことは、"Shared Key" を使用する必要があり、"Blob" の場合は "SharedKey Lite を使用する" ことです。

http://social.msdn.microsoft.com/Forums/en-US/windowsazureconnectivity/thread/84415c36-9475-4af0-9f52-c534f5681432

また、プロキシの背後で作業している場合は、ポートがブロックされていないことを確認してください。一部のポートがブロックされている場合、Windows azure からの応答はありません。

于 2013-04-30T04:22:56.170 に答える
0

認証文字列は、この仕様に従って署名する必要がありますhttp://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx

具体的には、ヘッダーのセクション

<primary_key>

次のような出力になるはずです

Base64(HMAC_SHA256(UTF8("<primary_key>"),UTF8("VERB\n\n\nDATE\nRESOURCE")))
于 2013-04-05T20:48:27.297 に答える