Tüm Ürünler
Search
Belge Merkezi

Object Storage Service:Include a V4 signature in the Authorization header (recommended)

Son Güncelleme:Oct 01, 2026

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.


SDK


Uygulama


Java


OSSV4Signer.java


Python


v4.py


Go


v4.go


JavaScript


client.js


PHP


SignerV4.php


C#


SignerV4.cs


Android


OSSV4Signer.java


Swift


SignerV4.swift


Objective-C


OSSV4Signer.m


C++


SignerV4.cc


C


oss_auth.c

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:

<AccessKeyId>/<SignDate>/<SignRegion>/oss/aliyun_v4_request

Burada:

  • AccessKeyId: İsteği yapan kişinin kimliğini doğrulamak için kullanılan benzersiz bir tanımlayıcı olan AccessKey ID'niz.

  • SignDate: YYYYMMDD biçimindeki imza tarihi.

  • SignRegion: İstek için kullanılan bölge kimliği. Örnek: cn-hangzhou.

  • oss: İstenen hizmetin Alibaba Cloud Object Storage Service (OSS) olduğunu tanımlayan sabit bir dize.

  • aliyun_v4_request: İmza sürümünün V4 olduğunu belirten sabit bir dize.

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:

content-disposition;content-length

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:

3938**********************************dcdc

İ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:

image

İmza hesaplama süreci aşağıdaki üç adımdan oluşur:

  1. Kanonikleştirilmiş bir istek oluşturun: OSS imza özelliklerine göre isteği biçimlendirerek bir kanonikleştirilmiş istek oluşturun.

  2. İmzalanacak dizeyi oluşturun: Kanonikleştirilmiş isteği birleştirerek imzalanacak dizeyi türetin.

  3. İ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 (/) için kodlama gerekli değildir.

  • İstek hedefi OSS ise kaynak yolu / olur ve URI ile kodlanmış kaynak yolu UriEncode("/") şeklindedir.

  • İstek hedefi bir paket ise kaynak yolu /examplebucket/ olur ve URI ile kodlanmış kaynak yolu UriEncode("/examplebucket/") şeklindedir.

  • İstek hedefi bir paketteki bir nesne ise kaynak yolu /examplebucket/exampleobject olur ve URI ile kodlanmış kaynak yolu UriEncode("/examplebucket/exampleobject") şeklindedir.

Canonical Query String

Sözlük sırasına göre sıralanmış, URI ile kodlanmış sorgu parametreleri.

  • Sorgu parametreleri hem parametre adlarını hem de değerlerini içeriyorsa her bir parametrenin adını ve değerini ayrı ayrı URI ile kodlayın ve parametreleri kodlanmış adlarına göre sözlük sırasına göre sıralayın. Sıralamanın kodlamadan sonra yapıldığını unutmayın. Kodlanmış adı ve değeri bağlamak için = kullanın ve farklı parametreleri birleştirmek için & kullanın.

    • Sorgu parametreleri: prefix=somePrefix&marker=someMarker&max-keys=20

    • Kanonikleştirilmiş sorgu parametreleri:

      UriEncode("marker")+"="+UriEncode("someMarker")+"&"+UriEncode("max-keys")+"="+UriEncode("20")+"&"+UriEncode("prefix")+"="+UriEncode("somePrefix")
  • Sorgu parametresi yalnızca parametre adı içeriyorsa parametre adını URI ile kodlayın.

    • Sorgu parametresi: ?acl

    • Kanonikleştirilmiş sorgu parametresi: UriEncode("acl")

  • Sorgu parametresi yoksa, yani istek URI'si bir ? içermiyorsa kanonikleştirilmiş sorgu dizesi boş bir dize ("") olarak ayarlanır.

Canonical Headers

İstek üstbilgilerinin listesi.

İstek üstbilgileri aşağıdaki üç kategoriye ayrılır:

  • İstekte bulunması gereken ve imza hesaplamasına dahil edilen üstbilgiler:

    • x-oss-content-sha256: yalnızca UNSIGNED-PAYLOAD desteklenir.

  • İstekte varsa imza hesaplamasına dahil edilmesi gereken üstbilgiler:

    • Content-Type

    • Content-MD5

    • x-oss-*: x-oss- ile başlayan diğer istek üstbilgileri. Örneğin, STS AK aracılığıyla erişim sırasında SecurityToken x-oss-security-token:security-token aracılığıyla tanımlanır. Örneğin, istek zamanı x-oss-date aracılığıyla tanımlanır ve sözdizimi ISO8601 standart saat biçimi olmalıdır, örneğin 20231203T121212Z.

  • AdditionalHeaders içinde belirtilen isteğe bağlı istek üstbilgileri.

Sözdizimi aşağıdaki gibidir:

Lowercase(<HeaderName1>) + ":" + Trim(<value>) + "\n"
Lowercase(<HeaderName2>) + ":" + Trim(<value>) + "\n"
...
Lowercase(<HeaderNameN>) + ":" + Trim(<value>) + "\n"

Aşağıdaki örnek kod bir örneği göstermektedir:

content-disposition:attachment
content-length:3
content-md5:ICy5YqxZB1uWSwcVLSNLcA==
content-type:text/plain
x-oss-content-sha256:UNSIGNED-PAYLOAD
x-oss-date:20250328T101048Z

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 AdditionalHeaders ile tutarlıdır.

İ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 (;) ile ayrılırlar ve AdditionalHeaders ile tutarlıdır.

Aşağıdaki örnek kod bir örneği göstermektedir:

content-disposition;content-length

Hashed PayLoad

İstek yükünün SHA256 hash değerinin onaltılık gösterimi. Yalnızca UNSIGNED-PAYLOAD değeri desteklenir.

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 OSS4-HMAC-SHA256 olmalıdır.

TimeStamp

Geçerli UTC saati; sözdizimi ISO8601 olmalıdır, örneğin 20250320T083322Z.

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:

<SignDate>/<SignRegion>/oss/aliyun_v4_request

Açıklama aşağıdaki gibidir:

  • SignDate: İmzaya dahil edilen YYYYMMDD biçimli tarih.

  • SignRegion: İmza için kullanılan bölge kimliği, örneğin cn-hangzhou.

  • oss: İmzaya dahil edilen hizmet adı, sabit olarak oss şeklindedir.

  • aliyun_v4_request: İmzaya dahil edilen sürüm, sabit olarak aliyun_v4_request şeklindedir.

CanonicalRequest

Oluşturulan kanonikleştirilmiş istek.

3. İmza hesaplama

İmza hesaplama aşağıdaki iki adımı içerir:

  1. 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 edilen YYYYMMDD biçimli tarih; imzalanacak dizedeki SignDate ile tutarlı olmalıdır.

    • Region: İmza için kullanılan bölge kimliği, örneğin cn-hangzhou; imzalanacak dizedeki SignRegion ile tutarlı olmalıdır.

  2. SigningKey ve imzalanacak dizeyi kullanarak Signature değ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


Parametre


Değer


AccessKeyId


LTAI


AccessKeySecret


yourAccessKeySecret


Timestamp


20250411T064124Z


Paket


examplebucket


Nesne


exampleobject


Bölge


cn-hangzhou

İmza hesaplama örneği

  1. 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
  2. İmzalanacak dizeyi oluşturun.

    OSS4-HMAC-SHA256
    20250411T064124Z
    20250411/cn-hangzhou/oss/aliyun_v4_request
    c46d96390bdbc2d739ac9363293ae9d710b14e48081fcb22cd8ad54b63136eca
  3. İmzayı hesaplayın.

    1. SigningKey değerini hesaplayın.

      Not

      Okunabilirliği kolaylaştırmak için aşağıdaki SigningKey onaltılık biçimde görüntülenmektedir.

      3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76
    2. Signature değerini hesaplayın.

      053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23