2017-02-25 3 views
1

Ich brauche Hilfe beim Erstellen der Autorisierungskopfzeile PUT ein Block Blob.PUT Blob mit Blob Service-API in Postman - Autorisierungsheader

PUT \ n \ n \ n11 \ n \ n \ n \ n \ n \ n \ n \ n \ nx-ms-blob-type: BlockBlob \ nx-ms-date: Sa, 25 Feb 2017 22 : 20: 13 GMT \ nx-ms-version: 2015-02-21 \ n/myaccountname/mycontainername/blob.txt \ n

Ich nehme das, UTF 8 kodiere es. Dann nehme ich meinen Zugriffsschlüssel in mein Azure-Konto und HMAC sha256 diese UTF-8-codierte Zeichenfolge mit dem Schlüssel. Dann gebe ich das in base64 aus. Nennen wir diese Ausgabezeichenfolge.

Meine Genehmigung Header sieht wie folgt aus: sharedkey myaccountname: Ausgabe-String

Es funktioniert nicht.

Der Header in Postman hat auch x-ms-Blob-Typ, X-ms-Datum, X-ms-Version, Content-Length und Autorisierung. Der Körper sagt jetzt hallo Welt.

Kann jemand mir helfen, diese erfolgreiche Anfrage in Postman zu machen?

<?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:cdeb9a5e-0001-0029-5fb5-8f7995000000 
Time:2017-02-25T22:22:32.0300016Z</Message> 
    <AuthenticationErrorDetail>The MAC signature found in the HTTP request 'jiJtirohvi1syXulqkPKESnmQEJI4GpDU5JBn7BM/xY=' is not the same as any computed signature. Server used following string to sign: 'PUT 


11 

text/plain;charset=UTF-8 






x-ms-date:Sat, 25 Feb 2017 22:20:13 GMT 
x-ms-version:2015-02-21 
/myaccountname/mycontainername/blob.txt'.</AuthenticationErrorDetail> 
</Error> 

EDIT:

Zuerst möchte ich Ihnen und allen danken, die geantwortet. Ich schätze es wirklich sehr. Ich habe eine letzte Frage und dann denke ich, dass ich eingestellt werde !! Ich benutze diesen Code nicht - ich mache das alles mit der Hand. Wenn ich meinen Schlüssel habe: X2iiy6v47j1jZZH5555555555zzQRrIAdxxVs55555555555av8uBUNGcBMotmS7tDqas14gU5O/w == leicht für die Anonymität geändert - dekodiere ich es: mit einem Online-Base64decoder. Dann, wenn ich meine Zeichenfolge habe, die jetzt so aussieht: PUT \ n \ n \ n11 \ n \ ntext/plain; charset = UTF-8 \ n \ n \ n \ n \ n \ nx-ms-blob -type: BlockBlob \ nx-ms-date: Mo, 27 Feb 2017 21:53:13 GMT \ nx-ms-version: 2015-02-21 \ n/myaccount/mycontainer/blob.txt \ n also ich führe das aus in https://mothereff.in/utf-8 und dann verwenden Sie diese in HMAC mit meinem decodierten Schlüssel: https://www.liavaag.org/English/SHA-Generator/HMAC/ - mit sha256 und base64 am Ende. Ist das, wie ich die richtige Zeichenfolge bekommen hier zu setzen: sharedkey myaccount:

+0

Mit dem Tool, das Sie erwähnten, um den Code zu generieren, stimmt die Signatur aufgrund der "\ n" Zeichen nicht überein. Ich schrieb ein [Online-Tool] (https://onlineencrypt.herokuapp.com/), um die Signatur zu generieren. Ich habe auch die Antworten aktualisiert. –

Antwort

0

Ich glaube, ein Problem gibt es mit, wie Sie StringToSign hier sind spezifiziert:

PUT \ n \ n \ n11 \ n \ n \ n \ n \ n \ n \ n \ n \ nx-ms-blob-type: BlockBlob \ nx-ms-datum: Sat, 25 Feb 2017 22:20:13 GMT \ nx-ms-version: 2015 -02-21 \ n/myaccountname/mycontainername/blob.txt \ n

Wenn Sie die Fehlermeldung vom Server zurück bemerken, string von Server zu unterzeichnen ist anders als bei Ihnen und der Unterschied ist, dass der Server Content-Type (text/plain;charset=UTF-8) in Signaturberechnung verwendet, während Sie nicht sind. Bitte geben Sie diesen Inhaltstyp in Ihren Code ein und die Dinge sollten gut funktionieren.

Hier ist der Beispielcode (teilweise nur) ich verwendet:

 var requestMethod = "PUT"; 
     var urlPath = "test" + "/" + "myblob.txt"; 
     var storageServiceVersion = "2015-12-11"; 
     var date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture); 
     var blobType = "BlockBlob"; 
     var contentBytes = Encoding.UTF8.GetBytes("Hello World"); 
     var canonicalizedResource = "/" + accountName + "/" + urlPath; 
     var canonicalizedResource = "/" + accountName + "/" + urlPath; 
     var canonicalizedHeaders = "x-ms-blob-type:" + blobType + "\nx-ms-date:" + date + "\nx-ms-version:" + storageServiceVersion + "\n"; 
     var stringToSign = requestMethod + "\n" + 
      "\n" + //Content Encoding 
      "\n" + //Content Language 
      "11\n" + //Content Length 
      "\n" + //Content MD5 
      "text/plain;charset=UTF-8" + "\n" + //Content Type 
      "\n" + //Date 
      "\n" + //If - Modified - Since 
      "\n" + //If - Match 
      "\n" + //If - None - Match 
      "\n" + //If - Unmodified - Since 
      "\n" + //Range + 
      canonicalizedHeaders + 
      canonicalizedResource; 
     string authorizationHeader = GenerateSharedKey(stringToSign, accountKey, accountName); 


    private static string GenerateSharedKey(string stringToSign, string key, string account) 
    { 
     string signature; 
     var unicodeKey = Convert.FromBase64String(key); 
     using (var hmacSha256 = new HMACSHA256(unicodeKey)) 
     { 
      var dataToHmac = Encoding.UTF8.GetBytes(stringToSign); 
      signature = Convert.ToBase64String(hmacSha256.ComputeHash(dataToHmac)); 
     } 
     return string.Format(CultureInfo.InvariantCulture, "{0} {1}:{2}", "SharedKey", account, signature); 
    } 
0

Nach der Fehlermeldung zeigt an, dass Berechtigungs Signatur nicht korrekt ist.

Wenn der Inhaltstyp "text/plain; charset=UTF-8" nicht in der Kopfzeile enthalten ist, fügen Sie ihn bitte in die ZeichenfolgeTosign und Postman.

Wenn wir versuchen, die Signatur zu bekommen, müssen wir sicherstellen, dass die length of the blob.txt die Content length im StringTosign entspricht.Das bedeutet, dass die Länge des Anfragetexts mit der Inhaltslänge im StringTosign übereinstimmen sollte.

Ich teste es mit Postman, es funktioniert richtig. Wir können die Signatur mit dem Code in einem anderen SO Thread bekommen. Hier finden Sie meine Detail Schritte

  1. Fügen Sie den folgenden Header

enter image description here

  1. Fügen Sie den Anforderungstext (Beispiel: Hallo Welt)

enter image description here

  1. Senden Sie die Put-Blob-Anforderung.

enter image description here

Update:

haben Bitte versuchen Sie die online tool verwenden Signatur für Test zu erzeugen.