Karen Avdalyan
Karen Avdalyan

Reputation: 392

Azure put blob forbidden, but get blob works rest api

I want to put a text file to a blob container using HttResquestMessage, and I get 403 error(Forbidden). I know that this is a famous problem, and there are a lot of answers about it, but I've searched a lot and couldn't find the problem in my case. Here is my Signature

PUT\n
\n
\n
11\n
\n
\n
\n
\n
\n
\n
\n
\n
x-ms-blob-type:BlockBlob\n
x-ms-date:Thu, 10 May 2018 16:00:21 GMT\n
x-ms-version:2017-07-29\n
/MyStorage/dbstore/myFolder/test2.txt"

And this is Authorization generated by SHA256 and Base64 encoding

SharedKey MyStorage:Oy8nB79/KVROzxYCYSF71djhIwYEYS36tgRqyxe6sXY=

This Authorization works for GET request I've tried to get all container names and it succeeded.

My HttpRequestMessage looks like

{Method: PUT, RequestUri:             
'http://MyStorage.blob.core.windows.net/dbstore/            
myFolder/test2.txt', Version: 1.1, Content: 
System.Net.Http.ByteArrayContent, Headers:
{
  x-ms-date: Fri, 11 May 2018 06:39:35 GMT
  x-ms-version: 2017-07-29
  Authorization: SharedKey     
storagekaren:Oy8nB79/KVROzxYCYSF71djhIwYEYS36tgRqyxe6sXY=
  Content-Length: 11
  Content-MD5: CAQ66JnJH0H9GhrLTy+b1w==
}}
    Content: {System.Net.Http.ByteArrayContent}
    Headers: {x-ms-date: Fri, 11 May 2018 06:39:35 GMT
x-ms-version: 2017-07-29
Authorization: SharedKey     
storagekaren:Oy8nB79/KVROzxYCYSF71djhIwYEYS36tgRqyxe6sXY=
}
    Method: {PUT}
    Properties: Count = 0
    RequestUri: {http://MyStorage.blob.core.windows.net/dbstore/myFolder/test2.txt}
    Version: {1.1}

What I missed in the request?

Upvotes: 0

Views: 441

Answers (1)

Jerry Liu
Jerry Liu

Reputation: 17800

Two parameters need adding when putting blob

  • x-ms-blob-type is required to be included in HttpRequestMessage header.
  • Content-MD5 is optional, but if you add it in your request header, it should also be included in StringToSign, i.e. the Signature you mentioned.

Any further question, just ask.

Upvotes: 1

Related Questions