2017-08-10 6 views
2

ローカルでもAzure Appサービス内でも、Azure Storage C#クライアントをMVCアプリケーション内で使用しています。私は、コンソールとMVC5の両方のアプリケーションで次のようにクライアントを使用しています:Azure Storage C#クライアントはMVCアプリケーションでは403を禁止しますが、コンソールアプリケーションでは200を返します

var account = CloudStorageAccount.Parse("connectionstring"); 
var client = account.CreateCloudBlobClient(); 
var container = client.GetContainerReference("containername"); 
var blob = container.GetBlockBlobReference("somefile"); 
var exists = blob.Exists(); 

私はすべてのパラメータにまったく同じ値を使用しています。 Existsコールはコンソールアプリで正常に動作しますが、MVC5アプリケーションに例外を返します:

[WebException: The remote server returned an error: (403) Forbidden.] 

を、それは次のリクエスト/レスポンスを示しフィドラーを使用して、クライアントによって生成両方の要求を検査した後。

コンソールアプリ要求:

HEAD <url> HTTP/1.1 
User-Agent: Azure-Storage/8.3.0 (.NET CLR 4.0.30319.42000; Win32NT 6.2.9200.0) 
x-ms-version: 2017-04-17 
x-ms-client-request-id: 6d51e6c2-fb3f-48fd-ade5-2031d593b553 
x-ms-date: Thu, 10 Aug 2017 07:35:52 GMT 
Authorization: SharedKey <creds> 
Host: <host> 
Connection: Keep-Alive 

コンソールアプリの応答:

HTTP/1.1 200 OK 
Content-Length: 3992 
Content-Type: image/gif 
Content-MD5: Ehfh+rzNrbvTgIEh9gQgfw== 
Last-Modified: Tue, 27 Jun 2017 13:48:41 GMT 
Accept-Ranges: bytes 
ETag: "0x8D4BD6338BAED01" 
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 
x-ms-request-id: d7b7e17e-0001-003e-7bab-11987d000000 
x-ms-version: 2017-04-17 
x-ms-lease-status: unlocked 
x-ms-lease-state: available 
x-ms-blob-type: BlockBlob 
x-ms-server-encrypted: false 
Date: Thu, 10 Aug 2017 07:35:51 GMT 

MVC5要求:

HEAD <url> HTTP/1.1 
User-Agent: Azure-Storage/8.3.0 (.NET CLR 4.0.30319.42000; Win32NT 10.0.15063.0) 
x-ms-version: 2017-04-17 
x-ms-client-request-id: 138d3edc-a3b1-48c6-b268-6b878a4c01fd 
x-ms-date: Thu, 10 Aug 2017 07:33:46 GMT 
Authorization: SharedKey <creds> 
Host: <host> 
x-ms-request-root-id: ef1cb29-49a22f2b3f72be30 
x-ms-request-id: |ef1cb29-49a22f2b3f72be30. 
Request-Id: |ef1cb29-49a22f2b3f72be30. 

MVC5応答:

HTTP/1.1 403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. 
Transfer-Encoding: chunked 
Server: Microsoft-HTTPAPI/2.0 
x-ms-request-id: 106917c2-0001-00b8-2aaa-11ccaf000000 
Date: Thu, 10 Aug 2017 07:33:45 GMT 

両方のアプリケーションが.NET 4.5.2をターゲットにしており、WindowsAzure.Storageパッケージのバージョン8.3.0を使用しています。私もバージョン8.2.1と6.2.1を試しましたが、同じ問題が発生しました。

コードと値がまったく同じ場合、これら2つのアプリケーションが異なるHEAD要求を生成するのはなぜですか?

+1

私が気づいた興味深いのは、MVCリクエストヘッダに 'x-ms-request-root-id'と' x-ms-request-id'が存在することです。彼らはどこから来るのか知っていますか? –

+1

@GauravMantri明らかに彼らはApplication Insightsから来ています、私の答えを見てください。 – Snelbinder

答えて

4

私はthis号に出ています。私のMVCアプリケーションでは、私はApplication Insightsを使用しています。デフォルトAIのテンプレートによって示唆されているように私のweb.configファイルでは、私は、次のような構成を持っていない:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
    <remove name="ApplicationInsightsWebTracking" /> 
    <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" /> 
    </modules> 
<system.webServer> 

このウェブトラッキングモジュールを無効にした後x-ms-request-root-idx-ms-request-idRequest-Idは、BLOBストレージとそれへのリクエストに渡さなくなりましたうまく動作します。

1

こんにちは、同じ問題がありました。常に取得する403.私は数日間デバッグした後、アプリケーションの洞察は、(依存関係を追跡するために)BLOBストレージへの発信リクエストのヘッダーを追加することがわかりました。したがって、計算された署名は要求内の署名と同じではありません。私たちは問題を持っていない私たちはこの部分に

<TelemetryModules> 
<Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector"> 
    <ExcludeComponentCorrelationHttpHeadersOnDomains> 
    <!-- 
    Requests to the following hostnames will not be modified by adding correlation headers. 
    This is only applicable if Profiler is installed via either StatusMonitor or Azure Extension. 
    Add entries here to exclude additional hostnames. 
    NOTE: this configuration will be lost upon NuGet upgrade. 
    --> 
    <Add>core.windows.net</Add> 
    <Add>core.chinacloudapi.cn</Add> 
    <Add>core.cloudapi.de</Add> 
    <Add>core.usgovcloudapi.net</Add> 
    <Add>localhost</Add> 
    <Add>127.0.0.1</Add> 
    </ExcludeComponentCorrelationHttpHeadersOnDomains> 
</Add> 

を逃したことがわかり環境からApplicationInsights.configを比較すると、あなたは、これはすべてがうまく働いた後core.windows.netが、今では除外されて参照してください。

関連する問題