Paylaşılan Anahtarla Yetkilendirme

İstek genel veya imzalı erişim için kullanılabilir hale getirilmiş bir blob veya kapsayıcı kaynağına yönelik değilse, depolama hizmetine yapılan her istek yetkilendirilmelidir. bir isteği yetkilendirme seçeneği, bu makalede açıklanan Paylaşılan Anahtar'ı kullanmaktır.

Önemli

En iyi güvenlik için Microsoft, mümkün olduğunca blob, kuyruk ve tablo verilerine karşı istekleri yetkilendirmek için yönetilen kimliklerle Microsoft Entra Id kullanılmasını önerir. Microsoft Entra Kimliği ve yönetilen kimliklerle yetkilendirme, Paylaşılan Anahtar yetkilendirmesi üzerinden üstün güvenlik ve kullanım kolaylığı sağlar. Daha fazla bilgi edinmek için bkz. Microsoft Entra ID ile yetkilendirme. Yönetilen kimlikler hakkında daha fazla bilgi edinmek için bkz. Azure kaynakları için yönetilen kimlikler nelerdir.

Şirket içi uygulamalar gibi Azure dışında barındırılan kaynaklar için Azure Arc aracılığıyla yönetilen kimlikleri kullanabilirsiniz. Örneğin, Azure Arc özellikli sunucularda çalışan uygulamalar, Azure hizmetlerine bağlanmak için yönetilen kimlikleri kullanabilir. Daha fazla bilgi edinmek için bkz. Azure Arc özellikli sunucularla Azure kaynaklarında kimlik doğrulaması.

Paylaşılan erişim imzalarının (SAS) kullanıldığı senaryolar için Microsoft, kullanıcı temsilcisi SAS'sini kullanmanızı önerir. Kullanıcı temsilcisi SAS'sinin güvenliği hesap anahtarı yerine Microsoft Entra kimlik bilgileriyle sağlanır. Paylaşılan erişim imzaları hakkında bilgi edinmek için bkz. kullanıcı temsilcisi SASoluşturma .

Blob, Kuyruk, Tablo ve Dosya hizmetleri, sürüm 2009-09-19 ve üzeri (Blob, Kuyruk ve Tablo hizmeti için) ve sürüm 2014-02-14 ve üzeri (Dosya hizmeti için) için aşağıdaki Paylaşılan Anahtar yetkilendirme düzenlerini destekler:

  • Blob, Kuyruk ve Dosya Hizmetleri için Paylaşılan Anahtar. Blob, Kuyruk ve Dosya hizmetlerine yönelik isteklerde bulunmak için Paylaşılan Anahtar yetkilendirme düzenini kullanın. 2009-09-19 ve sonraki sürümlerde Paylaşılan Anahtar yetkilendirmesi, gelişmiş güvenlik için genişletilmiş imza dizesini destekler ve bu genişletilmiş imzayı kullanarak yetkilendirmek için hizmetinizi güncelleştirmenizi gerektirir.

  • Tablo Hizmeti için Paylaşılan Anahtar. REST API kullanarak Tablo hizmetine yönelik isteklerde bulunmak için Paylaşılan Anahtar yetkilendirme düzenini kullanın. 2009-09-19 ve sonraki sürümlerde Tablo hizmeti için Paylaşılan Anahtar yetkilendirmesi, Tablo hizmetinin önceki sürümlerindekiyle aynı imza dizesini kullanır.

  • Paylaşılan Key Lite. Blob, Kuyruk, Tablo ve Dosya hizmetlerine yönelik isteklerde bulunmak için Shared Key Lite yetkilendirme düzenini kullanın. Premium sayfa blobları için Paylaşılan Key Lite desteklenmez.

    Blob ve Kuyruk hizmetlerinin 2009-09-19 ve sonraki sürümleri için Paylaşılan Anahtar Lite yetkilendirmesi, Blob ve Kuyruk hizmetlerinin önceki sürümlerinde Paylaşılan Anahtar için desteklenenle aynı imza dizesinin kullanılmasını destekler. Bu nedenle, imza dizenizi güncelleştirmeden Blob ve Kuyruk hizmetlerine yönelik isteklerde bulunmak için Shared Key Lite kullanabilirsiniz.

Yetkili istek iki üst bilgi gerektirir: Date veya x-ms-date üst bilgisi ve Authorization üst bilgisi. Aşağıdaki bölümlerde bu üst bilgilerin nasıl derlediği açıklanmaktadır.

Önemli

Azure Depolama hem HTTP'yi hem de HTTPS'yi destekler, ancak HTTPS kullanılması kesinlikle önerilir.

Not

Kapsayıcı veya blob, bir kapsayıcının izinleri ayarlanarak genel erişim için kullanılabilir hale getirilebilir. Daha fazla bilgi için bkz. Azure Depolama Kaynaklarına Erişimi Yönetme. Kapsayıcı, blob, kuyruk veya tablo, paylaşılan erişim imzası aracılığıyla imzalı erişim için kullanılabilir hale getirilebilir; Paylaşılan erişim imzası farklı bir mekanizma aracılığıyla yetkilendirilmiştir. Daha fazla bilgi için bkz. Paylaşılan erişim imzası erişim temsilcisi atama.

Tarih üst bilgisini belirtme

Tüm yetkili istekler, istek için Eşgüdümlü Evrensel Saat (UTC) zaman damgasını içermelidir. Zaman damgasını x-ms-date üst bilgisinde veya standart HTTP/HTTPS Date üst bilgisinde belirtebilirsiniz. İstekte her iki üst bilgi de belirtilirse, isteğin oluşturulma zamanı olarak x-ms-date değeri kullanılır.

Depolama hizmetleri, hizmete ulaşana kadar isteğin 15 dakikadan eski olmamasını sağlar. Bu, yeniden yürütme saldırıları da dahil olmak üzere belirli güvenlik saldırılarına karşı koruma sağlar. Bu denetim başarısız olduğunda, sunucu yanıt kodu 403 (Yasak) döndürür.

Not

bazı HTTP istemci kitaplıkları ve proxy'leri otomatik olarak Date üst bilgisini ayarladığından ve geliştiriciye yetkili isteğe eklemek için değerini okuma fırsatı vermediğinden x-ms-date üst bilgisi sağlanır. x-ms-dateayarlarsanız, Date üst bilgisi için boş bir değerle imzayı oluşturur.

Yetkilendirme üst bilgisini belirtme

Yetkili bir istek Authorization üst bilgisini içermelidir. Bu üst bilgi dahil edilmezse, istek anonimdir ve yalnızca genel erişim için işaretlenmiş bir kapsayıcı veya bloba ya da temsilci erişimi için paylaşılan erişim imzası sağlanan bir kapsayıcı, blob, kuyruk veya tabloya karşı başarılı olur.

bir isteği yetkilendirmek için, isteği yapan hesabın anahtarıyla isteği imzalamanız ve isteğin bir parçası olarak bu imzayı geçirmeniz gerekir.

Authorization üst bilgisinin biçimi aşağıdaki gibidir:

Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"  

burada SharedKey veya SharedKeyLite yetkilendirme düzeninin adıdır, AccountName kaynağı isteyen hesabın adıdır ve Signature istekten oluşturulmuş ve SHA256 algoritması kullanılarak hesaplanan ve ardından Base64 kodlaması kullanılarak kodlanmış karma tabanlı bir İleti Kimlik Doğrulama Kodudur (HMAC).

Not

Kaynak genel olarak erişilebilir durumdaysa farklı bir hesabın altında bulunan bir kaynak istemek mümkündür.

Aşağıdaki bölümlerde Authorization üst bilgisinin nasıl derlediği açıklanmaktadır.

İmza dizesini oluşturma

İmza dizesini nasıl oluşturduğunuz, hangi hizmet ve sürümde yetkilendirildiğinize ve hangi yetkilendirme düzenini kullandığınıza bağlıdır. İmza dizesini oluştururken aşağıdakileri göz önünde bulundurun:

  • Dizenin FIIL bölümü GET veya PUT gibi HTTP fiilidir ve büyük harf olmalıdır.

  • Blob, Kuyruk ve Dosya hizmetleri için Paylaşılan Anahtar yetkilendirmesi için, imza dizesinde yer alan her üst bilgi yalnızca bir kez görünebilir. Bir üst bilgi yineleniyorsa, hizmet durum kodu 400 (Hatalı İstek) döndürür.

  • Tüm standart HTTP üst bilgilerinin değerleri, dizeye, üst bilgi adları olmadan imza biçiminde gösterilen sırayla eklenmelidir. bu üst bilgiler isteğin bir parçası olarak belirtilmiyorsa boş olabilir; bu durumda, yalnızca yeni satır karakteri gereklidir.

  • x-ms-date üst bilgisi belirtilirse, istekte belirtilip belirtilmediğinden bağımsız olarak Date üst bilgisini yoksayabilir ve imza dizesinin Date bölümü için boş bir satır belirtebilirsiniz. Bu durumda, üst bilgisini eklemek için kurallı üst bilgi dizesi oluşturma yönergeleri izleyin.

    Hem x-ms-date hem de Datebelirtmek kabul edilebilir; bu durumda, hizmet x-ms-datedeğerini kullanır.

  • x-ms-date üst bilgisi belirtilmezse, üst bilgi adını dahil etmeden imza dizesinde Date üst bilgisini belirtin.

  • Gösterilen tüm yeni satır karakterleri (\n) imza dizesi içinde gereklidir.

  • İmza dizesi kurallı üst bilgileri ve kurallı hale getirilmiş kaynak dizelerini içerir. Bu dizeleri kurallı hale getirme, bunları Azure Depolama tarafından tanınan standart bir biçime sokar. İmza dizesinin bir bölümünü oluşturan CanonicalizedHeaders ve CanonicalizedResource dizelerini oluşturma hakkında ayrıntılı bilgi için bu konunun devamında yer alan uygun bölümlere bakın.

Blob, Kuyruk ve Dosya Hizmetleri (Paylaşılan Anahtar yetkilendirmesi)

Bir isteğin Paylaşılan Anahtar imza dizesini Blob veya Kuyruk hizmetinin 2009-09-19 sürümüne ve Dosya hizmetinin 2014-02-14 ve sonraki sürümlerine karşı kodlamak için aşağıdaki biçimi kullanın:

StringToSign = VERB + "\n" +  
               Content-Encoding + "\n" +  
               Content-Language + "\n" +  
               Content-Length + "\n" +  
               Content-MD5 + "\n" +  
               Content-Type + "\n" +  
               Date + "\n" +  
               If-Modified-Since + "\n" +  
               If-Match + "\n" +  
               If-None-Match + "\n" +  
               If-Unmodified-Since + "\n" +  
               Range + "\n" +  
               CanonicalizedHeaders +   
               CanonicalizedResource;  

Önemli

geçerli sürümde, isteğin içerik uzunluğu sıfırsa İçerik Uzunluğu alanı boş bir dize olmalıdır. Sürüm 2014-02-14 ve önceki sürümlerde içerik uzunluğu sıfır olsa bile dahil edildi. Eski davranış hakkında daha fazla bilgi için aşağıya bakın.

Aşağıdaki örnekte, Blob Alma işlemi için imza dizesi gösterilmektedir. Üst bilgi değeri olmadığında, yalnızca yeni satır karakteri belirtilir.

GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:Fri, 26 Jun 2015 23:39:12 GMT\nx-ms-version:2015-02-21\n/myaccount/mycontainer\ncomp:metadata\nrestype:container\ntimeout:20  

Bunu satır satır bölmek, aynı dizenin her bir bölümünü gösterir:

GET\n /*HTTP Verb*/  
\n    /*Content-Encoding*/  
\n    /*Content-Language*/  
\n    /*Content-Length (empty string when zero)*/  
\n    /*Content-MD5*/  
\n    /*Content-Type*/  
\n    /*Date*/  
\n    /*If-Modified-Since */  
\n    /*If-Match*/  
\n    /*If-None-Match*/  
\n    /*If-Unmodified-Since*/  
\n    /*Range*/  
x-ms-date:Fri, 26 Jun 2015 23:39:12 GMT\nx-ms-version:2015-02-21\n    /*CanonicalizedHeaders*/  
/myaccount /mycontainer\ncomp:metadata\nrestype:container\ntimeout:20    /*CanonicalizedResource*/  

Ardından, UTF-8 ile kodlanmış imza dizesi üzerinde HMAC-SHA256 algoritmasını kullanarak bu dizeyi kodlayıp Authorization üst bilgisini oluşturun ve üst bilgiyi isteğe ekleyin. Aşağıdaki örnekte aynı işlemin Authorization üst bilgisi gösterilmektedir:

Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=  

Blob ve Kuyruk hizmetlerinin 2009-09-19 ve sonraki sürümleriyle Paylaşılan Anahtar yetkilendirmesini kullanmak için kodunuzu bu genişletilmiş imza dizesini kullanacak şekilde güncelleştirmeniz gerekir.

Kodunuzu mümkün olan en az değişiklikle Blob ve Kuyruk hizmetlerinin 2009-09-19 veya sonraki bir sürümüne geçirmeyi tercih ederseniz, mevcut Authorization üst bilgilerinizi Paylaşılan Anahtar yerine Paylaşılan Anahtar Lite kullanacak şekilde değiştirebilirsiniz. Shared Key Lite için gereken imza biçimi, Blob ve Kuyruk hizmetlerinin 2009-09-19 öncesi sürümleri tarafından Paylaşılan Anahtar için gerekli olanla aynıdır.

Önemli

Okuma erişimli coğrafi çoğaltmanın (RA-GRS) etkinleştirildiği bir depolama hesabında ikincil konuma erişiyorsanız yetkilendirme üst bilgisine -secondary atamasını eklemeyin. Yetkilendirme amacıyla, hesap adı her zaman ikincil erişim için bile birincil konumun adıdır.

Sürüm 2014-02-14 ve önceki sürümlerde Content-Length üst bilgisi

2014-02-14 veya önceki bir sürümü kullanırken, Content-Length sıfırsa, StringToSignContent-Length bölümünü 0olarak ayarlayın. Normalde bu boş bir dize olur.

Örneğin, aşağıdaki istek için Content-Length üst bilgisinin değeri sıfır olsa bile StringToSign eklenir.

PUT http://myaccount/mycontainer?restype=container&timeout=30 HTTP/1.1  
x-ms-version: 2014-02-14  
x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT  
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=  
Content-Length: 0

StringToSign aşağıdaki gibi oluşturulur:

Version 2014-02-14 and earlier:
PUT\n\n\n\n0\n\n\n\n\n\n\n\nx-ms-date:Fri, 26 Jun 2015 23:39:12 GMT\nx-ms-version:2014-02-14\n/myaccount/mycontainer\nrestype:container\ntimeout:30

2014-02-14'ün sonraki sürümlerinde ise, StringToSignContent-Lengthiçin boş bir dize içermelidir:

Version 2015-02-21 and later:
PUT\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:Fri, 26 Jun 2015 23:39:12 GMT\nx-ms-version:2015-02-21\n/myaccount/mycontainer\nrestype:container\ntimeout:30

Tablo hizmeti (Paylaşılan Anahtar yetkilendirmesi)

Hizmetiniz isteği yapmak için REST API kullanıyorsa Tablo hizmetinde yapılan bir isteği yetkilendirmek için Paylaşılan Anahtar yetkilendirmesini kullanmanız gerekir. Paylaşılan Anahtar için Tablo hizmetine karşı imza dizesinin biçimi tüm sürümler için aynıdır.

Tablo hizmetine yönelik bir isteğin Paylaşılan Anahtar imza dizesi, Blob veya Kuyruk hizmetine yönelik bir istekte dizenin CanonicalizedHeaders bölümünü içermediğinden biraz farklıdır. Ayrıca, istek x-ms-date üst bilgisini belirlese bile bu durumda Date üst bilgisi hiçbir zaman boş olmaz. İstek x-ms-dateayarlarsa, bu değer Date üst bilgisinin değeri için de kullanılır.

bir isteğin imza dizesini REST API kullanılarak yapılan Tablo hizmetine karşı kodlamak için aşağıdaki biçimi kullanın:

StringToSign = VERB + "\n" +
               Content-MD5 + "\n" +
               Content-Type + "\n" +  
               Date + "\n" +  
               CanonicalizedResource;  

Not

2009-09-19 sürümünden başlayarak, Tablo hizmeti tüm REST çağrılarının DataServiceVersion ve MaxDataServiceVersion üst bilgilerini içermesini gerektirir. Daha fazla bilgi için bkz. OData Data Service Sürüm Üst Bilgilerini ayarlama.

Blob, Kuyruk ve Dosya hizmetleri (Paylaşılan Key Lite yetkilendirmesi)

Blob ve Kuyruk hizmetlerinin 2009-09-19 sürümüne ve sonraki sürümlerine ve Dosya hizmetlerinin 2014-02-14 ve sonraki sürümlerine karşı yapılan bir isteği yetkilendirmek için Paylaşılan Key Lite yetkilendirmesini kullanabilirsiniz. Premium sayfa blobları için Paylaşılan Key Lite desteklenmez.

Shared Key Lite için imza dizesi, Blob ve Kuyruk hizmetlerinin 2009-09-19 öncesi sürümlerinde Paylaşılan Anahtar yetkilendirmesi için gereken imza dizesiyle aynıdır. Bu nedenle, kodunuzu Blob ve Kuyruk hizmetlerinin 2009-09-19 sürümüne en az sayıda değişiklikle geçirmek istiyorsanız, imza dizesinin kendisini değiştirmeden kodunuzu Paylaşılan Anahtar Lite kullanacak şekilde değiştirebilirsiniz. Shared Key Lite kullanarak, Paylaşılan Anahtar'ı 2009-09-19 ve sonraki bir sürümle kullanarak sağlanan gelişmiş güvenlik işlevselliğini elde etmeyebilirsiniz.

Bir isteğin imza dizesini Blob veya Kuyruk hizmetine karşı kodlamak için aşağıdaki biçimi kullanın:

StringToSign = VERB + "\n" +  
               Content-MD5 + "\n" +  
               Content-Type + "\n" +  
               Date + "\n" +  
               CanonicalizedHeaders +   
               CanonicalizedResource;  

Aşağıdaki örnekte, Put Blob işlemi için bir imza dizesi gösterilmektedir. Content-MD5 üst bilgi satırının boş olduğunu unutmayın. Dizede gösterilen üst bilgiler, yeni blob için özel meta veri değerlerini belirten ad-değer çiftleridir.

PUT\n\ntext/plain; charset=UTF-8\n\nx-ms-date:Sun, 20 Sep 2009 20:36:40 GMT\nx-ms-meta-m1:v1\nx-ms-meta-m2:v2\n/testaccount1/mycontainer/hello.txt  

Ardından, UTF-8 ile kodlanmış imza dizesi üzerinde HMAC-SHA256 algoritmasını kullanarak bu dizeyi kodlayıp Authorization üst bilgisini oluşturun ve üst bilgiyi isteğe ekleyin. Aşağıdaki örnekte aynı işlemin Authorization üst bilgisi gösterilmektedir:

Authorization: SharedKeyLite myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=  

Tablo hizmeti (Paylaşılan Anahtar Lite yetkilendirmesi)

Table hizmetinin herhangi bir sürümünde yapılan bir isteği yetkilendirmek için Shared Key Lite yetkilendirmesini kullanabilirsiniz.

Shared Key Lite kullanarak tablo hizmetine yönelik bir isteğin imza dizesini kodlamak için aşağıdaki biçimi kullanın:

StringToSign = Date + "\n"
               CanonicalizedResource  

Aşağıdaki örnekte, Tablo Oluşturma işlemi için imza dizesi gösterilmektedir.

Sun, 11 Oct 2009 19:52:39 GMT\n/testaccount1/Tables  

Ardından, HMAC-SHA256 algoritmasını kullanarak bu dizeyi kodlayın, Authorization üst bilgisini oluşturun ve ardından üst bilgiyi isteğe ekleyin. Aşağıdaki örnekte aynı işlemin Authorization üst bilgisi gösterilmektedir:

Authorization: SharedKeyLite testaccount1:uay+rilMVayH/SVI8X+a3fL8k/NxCnIePdyZSkqvydM=  

Kurallı üst bilgi dizesini oluşturma

İmza dizesinin CanonicalizedHeaders bölümünü oluşturmak için şu adımları izleyin:

  1. x-ms-date üst bilgisi de dahil olmak üzere x-ms-ile başlayan kaynağın tüm üst bilgilerini alın.

  2. Her HTTP üst bilgi adını küçük harfe dönüştürün.

  3. Üst bilgileri sözcük temelli olarak üst bilgi adına göre artan düzende sıralayın. Her üst bilgi dizede yalnızca bir kez görünebilir.

    Not

    Lexicographical sıralama geleneksel alfabetik sıralamayla her zaman aynı olmayabilir.

  4. Üst bilgi değerindeki herhangi bir doğrusal boşluğu tek bir boşlukla değiştirin.

Doğrusal boşluk satır başı/satır beslemesi (CRLF), boşluklar ve sekmeleri içerir. Ayrıntılar için rfc 2616, bölüm 4.2 bakın. Tırnak içine alınmış bir dizenin içindeki boşluğu değiştirmeyin.

  1. Üst bilgideki iki nokta üst üste çevresindeki boşlukları kırpın.

  2. Son olarak, sonuçta elde edilen listedeki kurallı üst bilgilerin her birine yeni satır karakteri ekleyin. Bu listedeki tüm üst bilgileri tek bir dizede birleştirerek CanonicalizedHeaders dizesini oluşturun.

Aşağıda kurallı bir üst bilgi dizesi örneği gösterilmektedir:

x-ms-date:Sat, 21 Feb 2015 00:48:38 GMT\nx-ms-version:2014-02-14\n

Not

Hizmet sürümü 2016-05-31'den önce, imza dizesinden boş değerler içeren üst bilgiler atlandı. Bunlar artık CanonicalizedHeaders içinde sonlandırıcı yeni satır ile iki nokta üst üste karakteri hemen takip ederek temsil edilir.

Kurallı hale getirilmiş kaynak dizesini oluşturma

İmza dizesinin CanonicalizedResource bölümü, istek tarafından hedeflenen depolama hizmetleri kaynağını temsil eder. kaynağın URI'sinden türetilen CanonicalizedResource dizesinin herhangi bir bölümü tam olarak URI'deki gibi kodlanmalıdır.

CanonicalizedResource dizesi için desteklenen iki biçim vardır:

  • Blob ve Kuyruk hizmetlerinin 2009-09-19 ve üstü ile Dosya hizmetinin 2014-02-14 ve sonraki sürümleri için Paylaşılan Anahtar yetkilendirmesini destekleyen biçim.

  • Tablo hizmetinin tüm sürümleri için Paylaşılan Anahtar ve Paylaşılan Anahtar Lite'ı ve Blob ve Kuyruk hizmetlerinin 2009-09-19 ve sonraki sürümleri için Paylaşılan Anahtar Lite'ı destekleyen bir biçim. Bu biçim, depolama hizmetlerinin önceki sürümlerinde kullanılan biçimle aynıdır.

Eriştiğiniz kaynağın URI'sini oluşturma konusunda yardım için aşağıdaki konulardan birine bakın:

Önemli

Depolama hesabınız okuma erişimli coğrafi çoğaltma (RA-GRS) ile çoğaltıldıysa ve ikincil konumdaki bir kaynağa erişiyorsanız, CanonicalizedResource dizesine –secondary gösterimini eklemeyin. CanonicalizedResource dizesi URI'sinde kullanılan kaynak URI'sinin birincil konumdaki kaynağın URI'si olması gerekir.

Not

Depolama öykünücüsü için yetki verirseniz, hesap adı CanonicalizedResource dizesinde iki kez görünür. Bu beklenen bir durumdur. Azure depolama hizmetlerinde yetkilendiriliyorsanız, hesap adı CanonicalizedResource dizesinde yalnızca bir kez görünür.

2009-09-19 ve üzeri için Paylaşılan Anahtar biçimi

Bu biçim, Blob ve Kuyruk hizmetlerinin 2009-09-19 sürümü ve üstü ile Dosya hizmetlerinin 2014-02-14 sürümü ve üzeri için Paylaşılan Anahtar yetkilendirmesini destekler. CanonicalizedResource dizesini şu biçimde oluşturun:

  1. Boş dize ("") ile başlayarak, bir eğik çizgi (/) ekleyin ve ardından erişilen kaynağın sahibi olan hesabın adını ekleyin.

  2. Herhangi bir sorgu parametresi olmadan kaynağın kodlanmış URI yolunu ekleyin.

  3. Varsa comp parametresi dahil olmak üzere kaynak URI'sinde tüm sorgu parametrelerini alın.

  4. Tüm parametre adlarını küçük harfe dönüştürün.

  5. Sorgu parametrelerini sözcük temelli olarak parametre adına göre artan düzende sıralayın.

  6. Url ile her sorgu parametresinin adını ve değerinin kodunu çöz.

  7. Her ad-değer çifti önüne bir yeni satır karakteri (\n) ekleyin.

  8. Her sorgu parametresinin adını ve değerini dizeye aşağıdaki biçimde ekleyerek adla değer arasında iki nokta üst üste (:)) eklediğinizden emin olun:

    parameter-name:parameter-value

  9. Sorgu parametresinin birden fazla değeri varsa, tüm değerleri sözcük temelli olarak sıralayın ve bunları virgülle ayrılmış bir listeye ekleyin:

    parameter-name:parameter-value-1,parameter-value-2,parameter-value-n

Kurallı hale getirilmiş kaynak dizesini oluşturmak için aşağıdaki kuralları göz önünde bulundurun:

  • Sorgu parametreleri için değerlerde yeni satır karakterini (\n) kullanmaktan kaçının. Kullanılması gerekiyorsa kurallı hale getirilmiş kaynak dizesinin biçimini etkilemediğinden emin olun.

  • Sorgu parametresi değerlerinde virgül kullanmaktan kaçının.

Belirli bir istek URI'sinden oluşturulaabildiği için imza dizesinin CanonicalizedResource bölümünü gösteren bazı örnekler aşağıda verilmiştir:

Get Container Metadata  
   GET http://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=metadata
CanonicalizedResource:  
    /myaccount/mycontainer\ncomp:metadata\nrestype:container  
  
List Blobs operation:  
    GET http://myaccount.blob.core.windows.net/container?restype=container&comp=list&include=snapshots&include=metadata&include=uncommittedblobs  
CanonicalizedResource:  
    /myaccount/mycontainer\ncomp:list\ninclude:metadata,snapshots,uncommittedblobs\nrestype:container  
  
Get Blob operation against a resource in the secondary location:  
   GET https://myaccount-secondary.blob.core.windows.net/mycontainer/myblob  
CanonicalizedResource:  
    /myaccount/mycontainer/myblob

2009-09-19 ve üzeri için Paylaşılan Key Lite ve Tablo hizmeti biçimi

Bu biçim, Tablo hizmetinin tüm sürümleri için Paylaşılan Anahtar ve Paylaşılan Anahtar Lite'ı, Blob ve Kuyruk hizmetlerinin 2009-09-19 ve sonraki sürümleri ile Dosya hizmetinin 2014-02-14 ve sonraki sürümleri için Paylaşılan Anahtar Lite'ı destekler. Bu biçim, depolama hizmetlerinin önceki sürümlerinde kullanılan biçimle aynıdır. CanonicalizedResource dizesini şu biçimde oluşturun:

  1. Boş dize ("") ile başlayarak, bir eğik çizgi (/) ekleyin ve ardından erişilen kaynağın sahibi olan hesabın adını ekleyin.

  2. Kaynağın kodlanmış URI yolunu ekleme. İstek URI'si kaynağın bir bileşenini ele alırsa, uygun sorgu dizesini ekleyin. Sorgu dizesi soru işaretini ve comp parametresini içermelidir (örneğin, ?comp=metadata). Sorgu dizesine başka parametre eklenmemelidir.

İmzayı kodlama

İmzayı kodlamak için UTF-8 ile kodlanmış imza dizesinde HMAC-SHA256 algoritmasını çağırın ve sonucu Base64 olarak kodlayın. Depolama hesabı anahtarınızın kodunu Base64 ile çözmeniz gerektiğini unutmayın. Aşağıdaki biçimi kullanın (sahte kod olarak gösterilir):

Signature=Base64(HMAC-SHA256(UTF8(StringToSign), Base64.decode(<your_azure_storage_account_shared_key>)))  

Ayrıca bkz.