2016-06-13 6 views
0

ブロブデータを特定のAzureアカウントにアップロードできるライブラリを作成する必要があります。ここで例によるとWindows Azure Storage Clientでblobアップロード操作を承認する適切な方法は何ですか?

x-ms-date, x-ms-version, Content-MD5, x-ms-blob-type, Content-Type, Authorization 

:以下のパラメータは、外部のWebサービスによって、動的に提供されます

https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-shared-access-signature-part-1/

私のようなものを持つ唯一のURLとSasTokenでBLOBデータをアップロードすることができるはずです:

Uri blobUri = new Uri("http://127.0.0.1:10000/devstoreaccount1/sascontainer/myblob.txt"); 

// Create credentials with the SAS token. The SAS token was created in previous example. 
StorageCredentials credentials = new StorageCredentials(sasToken); 

// Create a new blob. 
CloudBlockBlob blob = new CloudBlockBlob(blobUri, credentials); 

// Upload the blob. 
// If the blob does not yet exist, it will be created. 
// If the blob does exist, its existing content will be overwritten. 
using (var fileStream = System.IO.File.OpenRead(@"c:\Temp\myblob.txt")) 
{ 
    blob.UploadFromStream(fileStream); 
} 

ただし、上記はsasTokenがこれに似ているとします

?sv=2015-07-08&sr=c&si=mypolicy&sig=FQctgR3waFrWpblkNJf6HYXAVa0%2BkxFUbP8Fr2op%2F%2FI%3D 

私serwiceは、これだけが提供されますが:REST APIでこれを行う方法で

https://msdn.microsoft.com/en-us/library/azure/dd179451.aspx

私はここにいくつかの例を発見した

{ 
    "Key": "Authorization", 
    "Value": "SharedKey storageAccountName:Tz7EqAl6OszIxGjBUk2qcxs82Af4Xq9CxyFx6u34LEI=" 
} 

Request Syntax: 
PUT https://myaccount.blob.core.windows.net/mycontainer/myblockblob HTTP/1.1 

Request Headers: 
x-ms-version: 2015-02-21 
x-ms-date: <date> 
Content-Type: text/plain; charset=UTF-8 
x-ms-blob-content-disposition: attachment; filename="fname.ext" 
x-ms-blob-type: BlockBlob 
x-ms-meta-m1: v1 
x-ms-meta-m2: v2 
Authorization: SharedKey myaccount:YhuFJjN4fAR8/AmBrqBz7MG2uFinQ4rkh4dscbj598g= 
Content-Length: 11 

Request Body: 
hello world 

しかし、私はアズールに新しい、私はストレージクライアントで上記を行う方法を見つけ出すことはできません...私は何とか手動で文字列パラメータを照会するために提供さヘッダパラメータを「マップ」またはより良い/他の方法がある必要がありますか?または、これはStorage Clientでサポートされていない可能性があり、RESTアプローチを使用する必要がありますか?

EDIT1:

明確にする:I - 多かれ少なかれ - 限り、それはこのフォームを持っているとして、SASのトークンでブロブをアップロードする方法、知っている:

https://myaccount.blob.core.windows.net/mycontainer/myblockblob??sv=2015-07-08&sr=c&si=mypolicy&sig=FQctgR3waFrWpblkNJf6HYXAVa0%2BkxFUbP8Fr2op%2F%2FI%3D

問題がある - このトークンはを提供されることはありません - 代わりに、我々はWebサービスを公開する、と統合しようとしているウェブサイト、および(我々が制御することはできません)このWebサービスはトンを提供します5つのパラメータ(以下の例のデータ)は、次の彼は:

{ 
    "Key": "x-ms-date", 
    "Value": "Mon, 13 Jun 2016 10:22:05 GMT" 
}, 
{ 
    "Key": "x-ms-version", 
    "Value": "2015-04-05" 
}, 
{ 
    "Key": "Content-MD5", 
    "Value": "dnF5x6K/8ZZRzpfSlMMM+w==" 
}, 
{ 
    "Key": "x-ms-blob-type", 
    "Value": "BlockBlob" 
}, 
{ 
    "Key": "Content-Type", 
    "Value": "application/octet-stream" 
}, 
{ 
    "Key": "Authorization", 
    "Value": "SharedKey taxdocumentstorage09tst:sImBLJPWACNPzi94eJEDRU4Bt5hz9sPURjwy46KixmM=" 
} 

答えて

1

しかし、私はアズールに新たなんだから、私はストレージクライアントと上記 を行う方法を見つけ出すことはできません...私は何とか手動で「マップする必要がありますか「文字列パラメータを照会する ヘッダパラメータを提供または より良い/他の方法は何ですか?それとも、これはストレージクライアント、 によってサポートされていないと私はRESTのアプローチを使用する必要がありますか?

Storage Clientライブラリは、これらのパラメータの一部を計算してからREST APIを呼び出すため、使用できません。あなたがする必要があるのは、REST APIを直接消費することです。必要な値をすべて取得しているので、REST APIの呼び出し、必要なヘッダーの挿入、要求の送信、応答の処理には、HttpWebRequest/WebClientを使用するだけです。

重要

だけでなく、認証ヘッダーを計算するために使用されて、彼らが送るパラメータのリクエストURLが含まれるようにWebサービスを依頼してください。

+0

答えてくれてありがとう - それで私が何かの事例を見つけることができなかった理由を説明してくれるだろう...ほぼ3日間無駄だ... :( URLは既に提供されているが、 JSONのみの "パラメータ" - 混乱してごめんなさい 誰もストレージクライアントでこれを行う方法に関する代替の回答を投稿しない場合は、私はあなたの投稿を回答としてマークします:) – user2384366

0

あなたのURLにSASトークンを追加する必要があり、ヘッダ「認可」ここでは必要ありません。たとえば、次のように

PUT https://myaccount.blob.core.windows.net/mycontainer/myblockblob?sv=2015-07-08&sr=c&si=mypolicy&sig=FQctgR3waFrWpblkNJf6HYXAVa0%2BkxFUbP8Fr2op%2F%2FI%3D

+0

返信ありがとうございます - 私の "Edit1"を見てください - 問題は:私は、私が投稿した限られたデータだけで、全体のトークンを提供されません。ですから、問題は - そのような状態でどのように認可するのですか?いくつかのパラメータを一致させて残りのものを推測することで、クエリ文字列sasトークンを手動で再構築することを考えましたが、いくつかのパラメータで何をするか分からないようです - 例えば: x-ms-date - 必須とマークされていますが、どこで設定できますか? また、Webサービスから返された署名がクエリ文字列の "sig ="パラメータと同じ署名であるかどうかはわかりません。 – user2384366

関連する問題