OSS'ye istek gönderirken, kimlik doğrulamanın başarılı olması için bir V4 imzası içeren Authorization istek üstbilgisini eklemeniz gerekir. İstekleri başlatmak için öncelikli olarak OSS tarafından sağlanan SDK'yı kullanmanızı öneririz; çünkü SDK, gelişmiş V4 imza algoritmasını zaten entegre etmiştir. Yalnızca SDK kullanılamadığında, V4 imza algoritmasını manuel olarak uygulamak üzere bu konuya bakın.
V4 imzalarını otomatik olarak uygulamak için OSS SDK'larını kullanın
V4 imza algoritmasını uygulamanız gerekiyorsa, OSS SDK'larında bulunan V4 imza uygulamasına bakmanızı öneririz.
|
|
|
Yetkilendirme istek üstbilgileri
OSS'ye bir istek gönderirken, isteği doğrulamak için Authorization üstbilgisinde imzayı belirtmeniz gerekir.
Aşağıda Authorization üstbilgisinin sözdizimi verilmiştir:
Authorization: OSS4-HMAC-SHA256 Credential=<AccessKeyId>/<SignDate>/<SignRegion>/oss/aliyun_v4_request, AdditionalHeaders=<AdditionalHeadersVal>, Signature=<SignatureVal>
Aşağıda Authorization üstbilgisinin açıklaması yer almaktadır:
|
Bileşen |
Açıklama |
|
OSS4-HMAC-SHA256 |
İmzanın hesaplanmasında kullanılan algoritmayı belirtir. Bu dize, imza sürümünü ve imzalama algoritmasını (HMAC-SHA256) tanımlar. Kimlik doğrulama için V4 imzaları kullanıldığında OSS4-HMAC-SHA256 değeri gereklidir. |
|
Credential |
AccessKey ID ve tarih, bölge ile imzayı hesaplamak için kullanılan cloud hizmetini içeren kapsamı belirtir. Bu alan, kimlik doğrulama için V4 imzaları kullanıldığında gereklidir. Sözdizimi aşağıdaki gibidir:
Burada:
|
|
AdditionalHeaders |
İmza hesaplamasına dahil edilen isteğe bağlı istek üstbilgilerini belirtin (imza hesaplamasına dahil edilmesi zorunlu olan üstbilgileri belirtmenize gerek yoktur). Bu alan yalnızca küçük harfle yazılmış, sözlük sırasına göre sıralanmış ve noktalı virgül (;) ile ayrılmış üstbilgi adlarını içerir. Örnek aşağıdaki gibidir:
|
|
Signature |
Hesaplanan imza. Kimlik doğrulama için V4 imzaları kullanıldığında bu alan gereklidir. Aşağıdaki örnek kod, 64 küçük onaltılık basamakla temsil edilen 256 bitlik bir imza değerini göstermektedir:
|
İmza hesaplama
OSS, bir isteği aldıktan sonra imzayı hesaplar ve bunu Authorization istek üstbilgisindeki imza ile karşılaştırır. Eşleşme durumunda istek başarılı olur. Aksi takdirde istek başarısız olur.
İmza hesaplama süreci
Aşağıdaki şekil, imza hesaplama sürecini göstermektedir:
İmza hesaplama süreci aşağıdaki üç adımdan oluşur:
Kanonikleştirilmiş bir istek oluşturun: OSS imza özelliklerine göre isteği biçimlendirerek bir kanonikleştirilmiş istek oluşturun.
İmzalanacak dizeyi oluşturun: Kanonikleştirilmiş isteği birleştirerek imzalanacak dizeyi türetin.
İmzayı hesaplayın: AccessKey Secret üzerinde birden çok hash işlemi gerçekleştirerek bir türetilmiş anahtar oluşturun ve ardından nihai imzayı elde etmek için imzalanacak dizeyi hesaplamak üzere türetilmiş anahtarı kullanın. AccessKey Secret üzerinde çok aşamalı HMAC-SHA256 işlemleri gerçekleştirilerek bir türetilmiş anahtar oluşturulur ve bu anahtar kullanılarak imzalanacak dizenin HMAC-SHA256 hash değeri hesaplanarak nihai imza elde edilir.
1. Kanonikleştirilmiş bir istek oluşturma
Aşağıda kanonikleştirilmiş bir isteğin sözdizimi verilmiştir:
HTTP Verb + "\n" +
Canonical URI + "\n" +
Canonical Query String + "\n" +
Canonical Headers + "\n" +
Additional Headers + "\n" +
Hashed PayLoad
Aşağıdaki tabloda kanonikleştirilmiş bir istekteki parametreler açıklanmıştır:
|
Parametre |
Açıklama |
|
HTTP Verb |
PUT, GET, POST, HEAD, DELETE ve OPTIONS dahil olmak üzere HTTP istek yöntemi. |
|
Canonical URI |
URI ile kodlanmış kaynak yolu. Kaynak yolu sorgu dizesini içermez ve eğik çizgiler (
|
|
Canonical Query String |
Sözlük sırasına göre sıralanmış, URI ile kodlanmış sorgu parametreleri.
|
|
Canonical Headers |
İstek üstbilgilerinin listesi. İstek üstbilgileri aşağıdaki üç kategoriye ayrılır:
Sözdizimi aşağıdaki gibidir:
Aşağıdaki örnek kod bir örneği göstermektedir:
|
|
Additional Headers |
İmza hesaplamasına dahil edilen isteğe bağlı istek üstbilgilerini belirtir (imza hesaplamasına dahil edilmesi gereken zorunlu üstbilgileri belirtmenize gerek yoktur). Bu alan yalnızca küçük harfle yazılmış, sözlük sırasına göre sıralanmış ve noktalı virgül (;) ile ayrılmış üstbilgi adlarını içerir ve İmza hesaplamasına dahil edilen isteğe bağlı üstbilgileri (zorunlu üstbilgiler hariç) belirtin; yalnızca küçük harfle yazılmış üstbilgi adları dahildir ve sözlük sırasına göre sıralanır. Noktalı virgül ( Aşağıdaki örnek kod bir örneği göstermektedir:
|
|
Hashed PayLoad |
İstek yükünün SHA256 hash değerinin onaltılık gösterimi. Yalnızca |
2. İmzalanacak dizeyi oluşturma
İmzalanacak dizenin sözdizimi aşağıdaki gibidir:
"OSS4-HMAC-SHA256" + "\n" +
TimeStamp + "\n" +
Scope + "\n" +
Hex(SHA256Hash(<CanonicalRequest>))
Aşağıdaki tabloda imzalanacak dizedeki parametreler açıklanmıştır:
|
Parametre |
Açıklama |
|
OSS4-HMAC-SHA256 |
İmzanın hash algoritması; değer |
|
TimeStamp |
Geçerli UTC saati; sözdizimi ISO8601 olmalıdır, örneğin |
|
Scope |
Türetilmiş anahtarı almak/erişmek için kullanılan parametre kümesi. Bu parametre kümesi tarihi, bölgeyi ve hizmeti belirtir. Bu nedenle, türetilmiş anahtar kullanılarak hesaplanan imza yalnızca belirtilen tarih, bölge ve hizmet için geçerlidir. Sözdizimi aşağıdaki gibidir:
Açıklama aşağıdaki gibidir:
|
|
CanonicalRequest |
Oluşturulan kanonikleştirilmiş istek. |
3. İmza hesaplama
İmza hesaplama aşağıdaki iki adımı içerir:
-
SigningKeyöğesini hesaplayın.DateKey = HMAC-SHA256("aliyun_v4" + SK, Date); DateRegionKey = HMAC-SHA256(DateKey, Region); DateRegionServiceKey = HMAC-SHA256(DateRegionKey, "oss"); SigningKey = HMAC-SHA256(DateRegionServiceKey, "aliyun_v4_request");SK: İmzaya dahil edilen AccessKey Secret.Date: İmzaya dahil edilenYYYYMMDDbiçimli tarih; imzalanacak dizedekiSignDateile tutarlı olmalıdır.Region: İmza için kullanılan bölge kimliği, örneğincn-hangzhou; imzalanacak dizedekiSignRegionile tutarlı olmalıdır.
-
SigningKeyve imzalanacak dizeyi kullanarakSignaturedeğerini hesaplayın.Signature = HEX(HMAC-SHA256(SigningKey, StringToSign))
İmza hesaplama örneği
Aşağıdaki örnek, PutObject işlemini çağırarak bir imzanın nasıl hesaplanacağını göstermektedir.
İmza hesaplama parametreleri
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
İmza hesaplama örneği
-
Kanonikleştirilmiş bir istek oluşturun.
PUT /examplebucket/exampleobject content-disposition:attachment content-length:3 content-md5:ICy5YqxZB1uWSwcVLSNLcA== content-type:text/plain x-oss-content-sha256:UNSIGNED-PAYLOAD x-oss-date:20250411T064124Z content-disposition;content-length UNSIGNED-PAYLOAD -
İmzalanacak dizeyi oluşturun.
OSS4-HMAC-SHA256 20250411T064124Z 20250411/cn-hangzhou/oss/aliyun_v4_request c46d96390bdbc2d739ac9363293ae9d710b14e48081fcb22cd8ad54b63136eca -
İmzayı hesaplayın.
-
SigningKey değerini hesaplayın.
NotOkunabilirliği kolaylaştırmak için aşağıdaki
SigningKeyonaltılık biçimde görüntülenmektedir.3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76 -
Signature değerini hesaplayın.
053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23
-