Paylaşılan Anahtar ile yetkilendirme
İstek genel veya imzalı erişim için kullanılabilir hale getirilmiş bir blob veya kapsayıcı kaynağı için olmadığı sürece, depolama hizmetinde 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 ID ve yönetilen kimliklerle yetkilendirme, Paylaşılan Anahtar yetkilendirmesi yerine ü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 nedir?
Ş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 kullanılmasını ö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 SAS İçerik Oluşturucu.
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 hizmetlerinde istekte 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 hizmetlerinde istekte bulunmak için Shared Key Lite yetkilendirme düzenini kullanın.
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 Paylaşılan Anahtar Lite'ı kullanabilirsiniz.
Yetkili istek için iki üst bilgi gerekir: Date
veya x-ms-date
üst bilgisi ve Authorization
üst bilgi. 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 ayrıntı için bkz . Paylaşılan erişim imzasıyla 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ı üst bilgide x-ms-date
veya standart HTTP/HTTPS Date
üst bilgisinde belirtebilirsiniz. İstekte her iki üst bilgi de belirtilirse, değeri x-ms-date
isteğin oluşturulma zamanı olarak 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 403 (Yasak) yanıt kodunu döndürür.
Not
x-ms-date
Bazı HTTP istemci kitaplıkları ve ara sunucuları üst bilgiyi otomatik olarak ayarladığından Date
ve geliştiriciye yetkili isteğe eklemek için değerini okuma fırsatı vermediğinden üst bilgi sağlanır. ayarlarsanız x-ms-date
, imzayı üst bilgi için Date
boş bir değerle oluşturur.
Yetkilendirme üst bilgisini belirtme
Yetkili bir istek üst bilgiyi içermelidir Authorization
. Bu üst bilgi dahil edilmezse, istek anonimdir ve yalnızca genel erişim için işaretlenmiş bir kapsayıcıda veya blobda ya da temsilci erişimi için paylaşılan erişim imzası sağlanan kapsayıcı, blob, kuyruk veya tabloda başarılı olur.
bir isteği yetkilendirmek için isteği yapan hesabın anahtarıyla imzalamanız ve isteğin bir parçası olarak bu imzayı geçirmeniz gerekir.
Üst bilginin biçimi Authorization
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 istekten oluşturulmuş ve Signature
SHA256 algoritması kullanılarak hesaplanan ve ardından Base64 kodlaması kullanılarak kodlanmış karma tabanlı bir İleti Kimlik Doğrulama Kodudur (HMAC).
Not
Kaynağın genel olarak erişilebilir olması durumunda farklı bir hesabın altında bulunan bir kaynak isteyebilirsiniz.
Aşağıdaki bölümlerde üst bilginin nasıl derlediği Authorization
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 dizesine dahil edilen her üst bilgi yalnızca bir kez görüntülenebilir. Herhangi bir üst bilgi yineleniyorsa, hizmet 400 (Hatalı İstek) durum kodunu döndürür.
Tüm standart HTTP üst bilgilerinin değerleri, üst bilgi adları olmadan imza biçiminde gösterilen sırayla dizeye 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 bilgi belirtilirse, istekte belirtilip belirtilmediğinden bağımsız olarak üst bilgiyi yoksayabilirDate
ve imza dizesinin bölümü içinDate
boş bir satır belirtebilirsiniz. Bu durumda, üst bilgiyi eklemekx-ms-date
için Kurallı üst bilgiler dizesi oluşturma bölümündeki yönergeleri izleyin.hem
Date
hem dex-ms-date
belirtmek kabul edilebilir; bu durumda hizmet değerinix-ms-date
kullanır.x-ms-date
Üst bilgi belirtilmezse, üst bilgi adını dahil etmeden imza dizesinde üst bilgiyi belirtinDate
.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 dizelerin kurallı hale getirilerek Azure Depolama tarafından tanınan standart bir biçime dönüştürülmesi sağlanır. İmza dizesinin
CanonicalizedHeaders
bir bölümünü oluşturan veCanonicalizedResource
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 Content-Length 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 Authorization
kodlayıp üst bilgiyi oluşturun ve üst bilgiyi isteğe ekleyin. Aşağıdaki örnekte aynı işlemin üst bilgisi gösterilmektedir Authorization
:
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
Paylaşılan Anahtar yetkilendirmesini Blob ve Kuyruk hizmetlerinin 2009-09-19 ve sonraki sürümleriyle 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 olan imza biçimiyle 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 atamayı eklemeyin -secondary
. 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, sıfırsa Content-Length
öğesinin Content-Length
StringToSign
bölümünü olarak 0
ayarlayın. Normalde bu boş bir dize olur.
Örneğin, aşağıdaki istek için üst bilginin değeri Content-Length
sıfır olduğunda bile içinde yer StringToSign
alır.
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'e kadar olan sürümlerde ise , StringToSign
için Content-Length
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. Tablo hizmetine karşı Paylaşılan Anahtar için 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 istekte dizenin bölümünü içermediğinden CanonicalizedHeaders
biraz farklıdır. Ayrıca, Date
istek üst bilgiyi belirlese x-ms-date
bile bu durumda üst bilgi hiçbir zaman boş olmaz. İstek ayarlarsa x-ms-date
, bu değer üst bilginin değeri Date
için de kullanılır.
REST API kullanılarak yapılan Tablo hizmetine yönelik bir isteğin imza dizesini 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 itibaren Tablo hizmeti, tüm REST çağrılarının ve MaxDataServiceVersion
üst bilgilerini içermesini DataServiceVersion
gerektirir. Daha fazla bilgi için bkz. OData Veri Hizmeti 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ü ve üstü ile Dosya hizmetlerinin 2014-02-14 ve sonraki sürümlerine karşı yapılan bir isteği yetkilendirmek için Paylaşılan Anahtar Lite yetkilendirmesini kullanabilirsiniz.
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ünde en az sayıda değişiklikle geçirmek isterseniz, imza dizesinin kendisini değiştirmeden kodunuzu Paylaşılan Anahtar Lite kullanacak şekilde değiştirebilirsiniz. Shared Key Lite'ı kullanarak, 2009-09-19 ve sonraki bir sürümle Paylaşılan Anahtar 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 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 Authorization
kodlayıp üst bilgiyi oluşturun ve üst bilgiyi isteğe ekleyin. Aşağıdaki örnekte aynı işlemin üst bilgisi gösterilmektedir Authorization
:
Authorization: SharedKeyLite myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
Tablo hizmeti (Shared Key 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, İçerik Oluşturucu Tablosu 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 Authorization
kodlayın, üst bilgiyi oluşturun ve ardından üst bilgiyi isteğe ekleyin. Aşağıdaki örnekte aynı işlemin üst bilgisi gösterilmektedir Authorization
:
Authorization: SharedKeyLite testaccount1:uay+rilMVayH/SVI8X+a3fL8k/NxCnIePdyZSkqvydM=
Kurallı hale getirilmiş üst bilgi dizesini oluşturma
İmza dizesinin CanonicalizedHeaders
bölümünü oluşturmak için şu adımları izleyin:
üst bilgisi dahil olmak üzere ile
x-ms-
başlayan kaynağınx-ms-date
tüm üst bilgilerini alın.Her HTTP üst bilgi adını küçük harfe dönüştürün.
Ü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
Sözcükbilimsel sıralama her zaman geleneksel alfabetik sıralamayla aynı olmayabilir.
Ü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 bkz. RFC 2616, bölüm 4.2 . Tırnak içine alınmış bir dizenin içindeki boşluğu değiştirmeyin.
Üst bilgideki iki nokta üst üste etrafındaki boşlukları kırpın.
Son olarak, sonuçta elde edilen listedeki kurallı üst bilgilerin her birine yeni satır karakteri ekleyin.
CanonicalizedHeaders
Bu listedeki tüm üst bilgileri tek bir dizede birleştirerek dizeyi 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ırla iki nokta üst üste karakteri takip edilerek temsil edilir.
Kurallı hale getirilmiş kaynak dizesini oluşturma
CanonicalizedResource
İmza dizesinin bölümü, istek tarafından hedeflenen depolama hizmetleri kaynağını temsil eder. Kaynağın CanonicalizedResource
URI'sinden türetilen dizenin herhangi bir bölümü, URI'de olduğu gibi tam olarak kodlanmalıdır.
Dize için CanonicalizedResource
desteklenen iki biçim vardır:
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 yetkilendirmesini destekleyen bir 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:
Blob hizmeti: Kapsayıcıları, Blobları ve Meta Verileri Adlandırma ve Buna Başvurma
Kuyruk hizmeti: Kuyruk Hizmeti Kaynaklarını Adresleme
Tablo hizmeti: Tablo Hizmeti Kaynaklarını Adresleme
Dosya hizmeti: Paylaşımları, Dizinleri, Dosyaları ve Meta Verileri Adlandırma ve Başvurma
Ö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, dizeye atamayı –secondary
eklemeyin CanonicalizedResource
. Dize URI'sinde CanonicalizedResource
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ı dizede CanonicalizedResource
iki kez görünür. Bu beklenen bir durumdur. Azure depolama hizmetlerinde yetkilendiriliyorsanız, hesap adı dizede CanonicalizedResource
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 üzeri ile Dosya hizmetlerinin 2014-02-14 sürümü ve üzeri için Paylaşılan Anahtar yetkilendirmesini destekler. Dizeyi CanonicalizedResource
şu biçimde oluşturun:
Boş dize ("") ile başlayarak, bir eğik çizgi (/) ekleyin ve ardından erişilen kaynağın sahibi olan hesabın adını ekleyin.
Herhangi bir sorgu parametresi olmadan kaynağın kodlanmış URI yolunu ekleyin.
Varsa parametresi dahil olmak üzere kaynak URI'sinde
comp
tüm sorgu parametrelerini alın.Tüm parametre adlarını küçük harfe dönüştürün.
Sorgu parametrelerini sözcük temelli olarak parametre adına göre artan düzende sıralayın.
Her sorgu parametresinin adını ve değerini URL ile kod çözme.
Her ad-değer çifti önüne bir yeni satır karakteri (\n) ekleyin.
Her sorgu parametresinin adını ve değerini dizeye aşağıdaki biçimde ekleyin ve adla değer arasında iki nokta üst üste (:)) eklediğinizden emin olun:
parameter-name:parameter-value
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 bölümünü gösteren CanonicalizedResource
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'ı ve 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. Dizeyi CanonicalizedResource
şu biçimde oluşturun:
Boş dize ("") ile başlayarak, bir eğik çizgi (/) ekleyin ve ardından erişilen kaynağın sahibi olan hesabın adını ekleyin.
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 parametresini
comp
içermelidir (örneğin,?comp=metadata
). Sorgu dizesine başka parametre eklenmemelidir.
İmzayı kodlama
İmzayı kodlamak için UTF-8 kodlu 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 de 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>)))