全部產品
Search
文件中心

Object Storage Service:V1簽名升級為V4簽名指引

更新時間:Dec 12, 2025

OSS 將逐步下線 V1 簽名,請儘快升級至更安全的 V4 簽名,以確保應用穩定運行。

如何從V1簽名升級為V4簽名

根據當前使用方式,參考對應的指引完成升級。

工具

類型

支援V4的版本

升級指引

OSS SDK

Java

3.17.4及以上版本

OSS SDK

Python V2

所有版本

Python V1

2.18.4及以上版本

Go V2

所有版本

Go V1

3.0.2及以上版本

PHP V2

所有版本

PHP V1

2.7.0及以上版本

C# V2

所有版本

C# V1

2.14.0及以上版本

JavaScript

6.20.0及以上版本

C++

1.10.0及以上版本

C

3.11.0及以上版本

Swift

所有版本

Objective-C

2.11.1及以上版本

Android

2.3及以上版本

ossutil

ossutil2.0

所有版本

ossutil

ossutil1.0

1.7.12及以上版本

ossfs

ossfs2.0

所有版本

ossfs

ossfs1.0

1.91.4及以上版本

API(手動建構簽章)

如何將手動構造的V1簽名演算法升級為V4,參見API(手動建構簽章)

OSS控制台

OSS自動升級,使用者無感

OSS SDK

Java

  1. 升級OSS Java SDK3.17.4及以上版本。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    • 指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,地區ID為cn-hangzhou

    • 顯式聲明使用 V4 簽名演算法,樣本值:SignVersion.V4

程式碼範例

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;

public class OSSClientV4 {

    public static void main(String[] args) throws Exception {
        // yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 填寫Endpoint對應的Region資訊,以華東1(杭州)為例,Region填寫為cn-hangzhou。
        String region = "cn-hangzhou";

        // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請先配置環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

        // 建立OSSClient執行個體。
        // 當OSSClient執行個體不再使用時,調用shutdown方法以釋放資源。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // 顯式聲明使用 V4 簽名演算法
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();
        
        // 使用OSSClient發起請求,例如執行檔案上傳、下載或管理等操作...
        
        // 當OSSClient執行個體不再使用時,調用shutdown方法以釋放資源。
        ossClient.shutdown();
    }
}

Python

Python SDK V2

  1. OSS Python SDK V2所有版本預設支援V4簽名。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為cn-hangzhou

程式碼範例

import alibabacloud_oss_v2 as oss

def main():
    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 方式一: 只填寫Region即可
    # 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
    cfg.region = 'cn-hangzhou'

    # # 方式二: 直接填寫Region和Endpoint
    # # 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
    # cfg.region = 'cn-hangzhou'
    # # 填寫Bucket所在地區對應的公網Endpoint。以華東1(杭州)為例,Endpoint填寫為'https://oss-cn-hangzhou.aliyuncs.com',
    # # 如需指定為http協議,請在指定網域名稱時填寫為'http://oss-cn-hangzhou.aliyuncs.com'
    # cfg.endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

Python SDK V1

  1. 升級OSS Python SDK V12.18.4及以上版本。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    • 指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,地區ID為cn-hangzhou

    • 顯式聲明使用 V4 簽名演算法,樣本值:oss2.ProviderAuthV4

程式碼範例

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請先配置環境變數。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
endpoint = 'yourEndpoint'
# 填寫Endpoint對應的Region資訊,例如cn-hangzhou。
region = 'cn-hangzhou'

# 填寫Bucket名稱。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region) 

Go

Go SDK V2

  1. OSS Go SDK V2所有版本預設支援V4簽名。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為cn-hangzhou

程式碼範例

package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	// 方式一:只填寫Region即可
	// 填寫Bucket所在地區,以華東1(杭州)為例,Region填寫為cn-hangzhou
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-hangzhou")

	// 方式二:直接填寫Region和Endpoint
	// 填寫Bucket所在地區,以華東1(杭州)為例,Region填寫為cn-hangzhou
	// 填寫Bucket所在地區對應的公網Endpoint,以華東1(杭州)為例,Endpoint填寫為'https://oss-cn-hangzhou.aliyuncs.com'。如需指定為http協議,請在指定網域名稱時填寫為'http://oss-cn-hangzhou.aliyuncs.com'
	// cfg := oss.LoadDefaultConfig().
	//     WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	//     WithRegion("cn-hangzhou").
	//     WithEndpoint("https://oss-cn-hangzhou.aliyuncs.com")

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 使用client執行後續操作...
}

Go SDK V1

說明

Go V2所有版本預設支援V4簽名,建議將Go SDK V1遷移到Go SDK V2

  1. 升級OSS GO SDK V13.0.2及以上版本。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    • 指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為cn-hangzhou

    • 顯式聲明使用 V4 簽名演算法,樣本值:oss.AuthV4

程式碼範例

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

// handleError 用於處理不可恢複的錯誤,並記錄錯誤資訊後終止程式。
func handleError(err error) {
	log.Fatalf("Error: %v", err)
}

// setupClient 用於設定並建立OSS用戶端執行個體。
// 參數:
//
//	endpoint - Bucket對應的Endpoint。
//	region - Endpoint對應的Region資訊。
//
// 返回建立的OSS用戶端執行個體。
func setupClient(endpoint, region string) (*oss.Client, error) {
	// 從環境變數中擷取訪問憑證。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		return nil, err
	}

	// 建立OSSClient執行個體,並使用V4簽名。
	client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region(region))
	if err != nil {
		return nil, err
	}

	return client, nil
}

func main() {
	// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	endpoint := "yourEndpoint"

	// yourRegion填寫Endpoint對應的Region資訊,例如cn-hangzhou。
	region := "yourRegion"

	// 檢查環境變數是否已經設定。
	if endpoint == "" || region == "" {
		log.Fatal("Please set yourEndpoint and yourRegion.")
	}

	// 設定並建立OSS用戶端執行個體。
	client, err := setupClient(endpoint, region)
	if err != nil {
		handleError(err)
	}

	// 輸出用戶端資訊。
	log.Printf("Client: %#v\n", client)
}

PHP

PHP SDK V2

  1. OSS PHP SDK V2所有版本預設支援V4簽名。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為cn-hangzhou

<?php

// 引入自動負載檔案,確保依賴庫能夠正確載入
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// 使用EnvironmentVariableCredentialsProvider從環境變數中讀取Access Key ID和Access Key Secret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# 載入SDK的預設配置,並設定憑證提供者
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 設定憑證提供者

// 方式一: 只填寫Region即可
// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
$cfg->setRegion(region: "cn-hangzhou");

// // 方式二: 直接填寫Region和Endpoint
// // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
// // 填寫Bucket所在地區對應的公網Endpoint。以華東1(杭州)為例,Endpoint填寫為'https://oss-cn-hangzhou.aliyuncs.com',
// // 如需指定為http協議,請在指定網域名稱時填寫為'http://oss-cn-hangzhou.aliyuncs.com'
// $cfg->setRegion(region: 'cn-hangzhou')->setEndpoint(endpoint: 'https://oss-cn-hangzhou.aliyuncs.com');

// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);

// 使用建立好的client執行後續操作...

PHP SDK V1

  1. 升級OSS PHP SDK V12.7.0及以上版本。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    • 指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,地區ID為cn-hangzhou

    • 顯式聲明使用 V4 簽名演算法,樣本值:OSS_SIGNATURE_VERSION_V4

程式碼範例

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;

try {
    // 從環境變數中擷取訪問憑證,並儲存在provider中。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    $provider = new EnvironmentVariableCredentialsProvider();
    // 填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";    
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,        
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        // 填寫Endpoint對應的Region資訊,例如cn-hangzhou。
        "region" => "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
} catch (OssException $e) {
    printf($e->getMessage() . "\n");
    return;
}

C#

C# SDK V2

  1. OSS C# SDK V2所有版本預設支援V4簽名。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為cn-hangzhou

using OSS = AlibabaCloud.OSS.V2; // 為阿里雲OSS SDK建立別名,簡化後續使用

var region = "cn-hangzhou"; // 必須項,設定Bucket所在的地區(Region)。以華東1(杭州)為例,Region填寫為cn-hangzhou
var endpoint = null as string;  // 可選項,指定訪問OSS服務的網域名稱。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com

// 載入OSS SDK的預設配置,此配置會自動從環境變數中讀取憑證資訊(如AccessKey)
var cfg = OSS.Configuration.LoadDefault();
// 顯式設定使用環境變數擷取憑證,用於身分識別驗證(格式:OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET)
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// 設定配置的Bucket地區
cfg.Region = region;
// 若已指定了endpoint,則覆蓋預設的endpoint
if(endpoint != null)
{
    cfg.Endpoint = endpoint;
}

// 使用配置資訊建立OSS用戶端執行個體
using var client = new OSS.Client(cfg);

// 使用建立好的client執行後續操作...

C# SDK V1

  1. 升級OSS C# SDK V12.14.0及以上版本。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    • 指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為cn-hangzhou

    • 顯式聲明使用 V4 簽名演算法,樣本值:SignVersion.V4

程式碼範例

using Aliyun.OSS;
using Aliyun.OSS.Common;
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");、

//  填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
const string endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

// 填寫Bucket所在地區對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。
const string region = "cn-hangzhou";

// 建立ClientConfiguration執行個體,按照您的需要修改預設參數。
var conf = new ClientConfiguration();

// 設定v4簽名。
conf.SignatureVersion = SignatureVersion.V4;

// 建立OssClient執行個體。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);

Node.js

  1. 升級OSS Node.js SDK6.20.0及以上版本。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    • 指定Bucket所在地區的OSS專用地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為oss-cn-hangzhou

    • 顯式聲明使用 V4 簽名演算法,樣本值:authorizationV4

const OSS = require('ali-oss');

const client = new OSS({
  // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // yourRegion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
  region: 'oss-cn-hangzhou',
  // 使用V4簽名演算法
  authorizationV4: true,
  // yourBucketName填寫Bucket名稱。
  bucket: 'yourBucketName',
  // yourEndpoint填寫Bucket所在地區對應的公網Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
});

Browser.js

  1. 升級OSS Browser.js SDK6.20.0及以上版本。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    • 指定Bucket所在地區的OSS專用地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為oss-cn-hangzhou

    • 顯式聲明使用 V4 簽名演算法,樣本值:authorizationV4

程式碼範例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <!--匯入SDK檔案-->
    <script
      type="text/javascript"
      src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.20.0.min.js"
    ></script>
    <script type="text/javascript">
      const client = new OSS({
        // yourRegion填寫Bucket所在地區。以華東1(杭州)為例,yourRegion填寫為oss-cn-hangzhou。
        region: 'yourRegion',
	authorizationV4: true,
        // 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
        accessKeyId: 'yourAccessKeyId',
        accessKeySecret: 'yourAccessKeySecret',
        // 從STS服務擷取的安全性權杖(SecurityToken)。
        stsToken: 'yourSecurityToken',
        // 填寫Bucket名稱,例如examplebucket。
        bucket: "examplebucket",
      });
    </script>
  </body>
</html>

C++

  1. 升級OSS C++ SDK1.10.0及以上版本。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    • 指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為cn-hangzhou

    • 顯式聲明使用 V4 簽名演算法,樣本值:SignatureVersionType::V4

程式碼範例

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* 初始化OSS帳號資訊。*/
            
    /* yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "yourEndpoint";
    /* yourRegion填寫Bucket所在地區對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。*/
    std::string Region = "yourRegion";
    
    /* 初始化網路等資源。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* 釋放網路等資源。*/
    ShutdownSdk();
    return 0;
}

C

  1. 升級OSS C SDK3.11.0及以上版本。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    • 指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為cn-hangzhou

    • 顯式聲明使用 V4 簽名演算法,樣本值:signature_version = 4

程式碼範例

#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
const char *endpoint = "yourEndpoint";
/* yourRegion填寫Bucket所在地區對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。*/
const char *region = "yourRegion";

void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* 用char*類型的字串初始化aos_string_t類型。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/  
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    //需要額外配置以下兩個參數
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* 是否使用CNAME訪問OSS服務。0表示不使用。*/
    options->config->is_cname = 0;
    /* 用於設定網路相關參數,其中這個函數的第二個參數表示ctl的歸屬,預設為0。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main() {
    aos_pool_t *p;
    oss_request_options_t *options;
    /* 初始化全域變數,在程式生命週期內只需要調用一次。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        return -1;
    }
    /* 初始化記憶體池和options。*/
    aos_pool_create(&p, NULL);
    options = oss_request_options_create(p);
    init_options(options);
    /* 邏輯代碼,此處省略。*/
    /* 釋放記憶體池,相當於釋放了請求過程中各資源分派的記憶體。*/
    aos_pool_destroy(p);
    /* 釋放之前分配的全域資源,在程式生命週期內只需要調用一次。*/
    aos_http_io_deinitialize();
    return 0;
}

Swift

  1. OSS Swift SDK所有版本預設支援V4簽名。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為cn-hangzhou

import AlibabaCloudOSS
import Foundation

@main
struct Main {
    static func main() async {
        // 填寫Bucket所在地區(樣本:華東1為cn-hangzhou)
        let region = "cn-hangzhou"
        // 可選項,指定訪問OSS服務的網域名稱。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com
        let endpoint: String? = nil

        // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        let credentialsProvider = EnvironmentCredentialsProvider()

        // 配置OSS用戶端參數
        let config = Configuration.default()
            .withRegion(region)        // 設定Bucket所在地區
            .withCredentialsProvider(credentialsProvider)  // 設定訪問憑證
            
        // 設定自訂Endpoint
        if let endpoint = endpoint {
            config.withEndpoint(endpoint)
        }
        
        // 建立OSS用戶端執行個體
        let client = Client(config)
    }
}

iOS

  1. 升級OSS iOS SDK2.11.1及以上版本。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    • 指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為cn-hangzhou

    • 顯式聲明使用 V4 簽名演算法,樣本值:OSSSignVersionV4

程式碼範例

// yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
NSString *endpoint = @"yourEndpoint";
// 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// 從STS服務擷取的安全性權杖(SecurityToken)。
NSString *securityToken = @"yourSecurityToken";
NSString *region = @"yourRegion";

id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken];
OSSClientConfiguration *configuration = [OSSClientConfiguration new];
configuration.signVersion = OSSSignVersionV4;
OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider clientConfiguration:configuration];
client.region = region;

Android

  1. 升級OSS Android SDK2.3及以上版本。

  2. 相比V1簽名,使用V4簽名初始化OSS Client時,您需要:

    • 指定Bucket所在地區的地區ID作為發起請求地區的標識,以華東1(杭州)為例,Region ID為cn-hangzhou

    • 顯式聲明使用 V4 簽名演算法,樣本值:SignVersion.V4

程式碼範例

// yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 從STS服務擷取的安全性權杖(SecurityToken)。
String securityToken = "yourSecurityToken";
// yourEndpoint填寫Bucket所在地區。以華東1(杭州)為例,region填寫為cn-hangzhou。
String region = "yourRegion";

OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// 建立OSSClient執行個體。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);

ossutil

ossutil2.0

命令列工具ossutil 2.0所有版本預設支援V4簽名。

相比V1簽名,使用V4簽名時,您需要在配置ossutil時,使用Bucket所在地區的地區ID設定Region

樣本命令

Please enter Region [cn-hangzhou]:cn-hangzhou

ossutil1.0

說明

ossutil2.0所有版本預設支援V4簽名,建議ossutil 1.0遷移至ossutil2.0

命令列工具ossutil 1.0的1.7.12及以上版本支援V4簽名。

相比V1簽名,使用V4簽名時,您需要在命令中:

  • 使用v4設定簽名版本--sign-version

  • 使用Bucket所在地區的地區ID設定--region

樣本命令

./ossutil64 --sign-version v4 --region cn-hangzhou mb oss://examplebucket

ossfs

ossfs2.0

ossfs 2.0(預覽版)所有版本都支援V4簽名,預設V1版本。

  1. 升級之前,執行ossfs --version命令查看目前的版本,並根據實際版本要求完成以下前置操作。

    重要

    涉及卸載操作將會中斷業務,建議您選擇在業務低穀期進行此操作。

    卸載已掛載的OSS檔案系統。<mountpoint>替換為實際目錄。

    sudo umount <mountpoint>

    卸載後,請按照樣本命令進行升級。

  2. 相比V1簽名,使用V4簽名時,您需要在掛載命令中:

  • 使用Bucket所在地區的地區ID設定oss_region選項。

樣本命令

ossfs2 mount /tmp/ossfs2-bucket/ -c /etc/ossfs2.conf   --oss_region=cn-hongkong

ossfs1.0

ossfs 1.0的1.91.4及以上版本支援V4簽名。

  1. 升級之前,執行ossfs --version命令查看目前的版本,並根據實際版本要求完成以下前置操作。

    重要

    涉及卸載操作將會中斷業務,建議您選擇在業務低穀期進行此操作。

    符合版本要求升級V4

    卸載已掛載的OSS檔案系統。<mountpoint>替換為實際目錄。

    sudo umount <mountpoint>

    卸載後,請按照樣本命令進行升級。

    不符合版本要求升級V4

    1. 卸載已掛載的OSS檔案系統。<mountpoint>替換為實際目錄。

      sudo umount <mountpoint>
    2. 卸載舊版本。

      如果是通過包管理工具(如 aptyum等)安裝的,請執行以下操作:

      sudo apt remove ossfs  # Ubuntu/Debian系統
      sudo yum remove ossfs  # CentOS系統/Anolis系統/Alibaba Cloud Linux系統

      如果是從原始碼編譯安裝的,進入到安裝目錄並執行以下操作:

      sudo make uninstall
    3. 下載安裝新版本

    安裝新版本後,請按照樣本命令進行升級。

  2. 相比V1簽名,使用V4簽名時,您需要在掛載命令中:

  • 設定sigv4選項。

  • 使用Bucket所在地區的地區ID設定region選項。

樣本命令

ossfs examplebucket -o sigv4 -o region=cn-hangzhou  /tmp/ossfs -o url=http://oss-cn-hangzhou.aliyuncs.com 

API(手動建構簽章)

建議您優先使用 OSS SDK 發起請求,SDK 會自動計算簽名。如無法使用 OSS SDK,需手動構造 V4 簽名並確保請求正確。

簽名方式

說明

參考文檔

在Header中包含簽名

在OSS中,使用HTTP請求的Authorization Header來攜帶簽名資訊是進行身分識別驗證的最常見方法。除了使用POST簽名和URL簽名之外,所有的OSS操作都需要通過Authorization Header來進行身分識別驗證。

在Header中包含V4簽名

在URL中包含簽名

通過產生一個包含簽名和其他必要請求資訊的預簽名URL的方式,在不透露訪問憑證的情況下,授予第三方在特定有效期間內對OSS資源的存取權限。

在URL中包含V4簽名

POST請求籤名

PostObject簽名旨在實現通過HTML表單直接上傳檔案到OSS的一種簽名機制。這種機制允許使用者在用戶端(例如Web瀏覽器)構造一個HTML表單,表單中包含要上傳檔案的欄位以及其他必要的參數,例如簽名、存取金鑰、Bucket名稱、對象鍵等。當表單提交時,這些資訊會通過HTTP POST請求發送到OSS,OSS會對POST請求進行合法性驗證。

POST請求V4簽名

V1簽名下線時間和影響

根據阿里雲Object Storage Service簽名版本 V1 下線公告,阿里雲Object Storage Service的 V1 簽名將於 2025 年 3 月 1 日起逐步不再對新客戶(新的 uid )開放使用,將於 2025 年 9 月 1 日起逐步停止更新與維護且不再對新增的 Bucket 開放使用。

V1簽名和V4簽名對比

專案

V1簽名

V4簽名

簽名演算法

HMAC-SHA1

HMAC-SHA256

預簽名URL有效期間

簽章時間可以超過 7天。有效期間可以超過7天。

簽章時間限制為7天內。有效期間限制7天內。

簽名字串的構建

構建的簽名字串包含 HTTP 方法、Content-MD5、Content-Type、日期、正常化的頭部和資源路徑。

構建的簽名字串包含更複雜的結構,包括要求方法、正常化的 URI、正常化的查詢參數、正常化的頭部、附加的簽名頭部和負載雜湊。

正常化頭部和查詢參數

只正常化以 x-oss-開頭的頭部,只有部分查詢參數參與簽名。

正常化所有以 x-oss-開頭的頭部以及預設簽名頭部(如content-type和content-md5),並且支援附加的簽名頭部。

資源路徑編碼

對資源路徑中的正斜線(/)進行編碼。

資源路徑中的/不做轉義,而查詢參數中的/需要轉義為%2F

時間戳記和日期格式

使用標準的HTTP日期格式(例如:Wed, 21 Oct 2015 07:28:00 GMT)。

使用ISO8601格式的UTC時間(例如:20151021T072800Z)

地區資訊

簽名中不包含地區資訊

簽名規則引入了地區的概念,簽名字串和簽名密鑰都需要包含RegionId。

常見問題

如何快速確認我現在使用的是OSS V1簽名還是V4簽名?

通過即時日誌查詢或抓包工具(如Wireshark、Fiddler),查看發送到OSS的HTTP要求標頭中的Authorization欄位。

  • V1簽名Authorization欄位以OSS開頭,格式如下:

    Authorization: OSS <AccessKeyId>:<Signature>
  • V4簽名Authorization欄位以OSS4-HMAC-SHA256開頭,格式如下:

    Authorization: OSS4-HMAC-SHA256 Credential=<AccessKeyId>/<Date>/<Region>/oss/aliyun_v4_request, AdditionalHeaders=<Headers>, Signature=<Signature>

SignatureDoesNotMatch如何快速檢查

如果簽名計算錯誤,系統會返回錯誤碼 SignatureDoesNotMatch。此時,可以通過對比服務端和用戶端產生的簽名相關資訊快速定位問題。服務端在返回的響應(Response)中會包含以下關鍵資訊:

  • CanonicalRequest:服務端產生的正常化請求字串。

  • StringToSign:服務端基於正常化請求產生的待簽名字串。

  • Signature:服務端最終計算出的簽名值。

將這些欄位與用戶端產生的對應欄位進行逐一比對,可以快速識別差異並定位錯誤來源。例如:

  • 如果 CanonicalRequest 不一致,可能是請求參數拼接順序或格式有誤。

  • 如果 StringToSign 不一致,可能是日期、地區或雲產品資訊設定錯誤。

  • 如果 Signature 不一致,可能是衍生金鑰計算或簽名演算法實現存在問題。