全部产品
Search
文档中心

Object Storage Service:Panduan untuk Meningkatkan dari Signature V1 ke Signature V4

更新时间:Dec 12, 2025

Object Storage Service (OSS) akan secara bertahap menghentikan penggunaan Signature V1. Untuk memastikan kelancaran aplikasi Anda, segera tingkatkan ke Signature V4 yang lebih aman.

Cara meningkatkan dari Signature V1 ke Signature V4

Ikuti panduan yang sesuai untuk menyelesaikan peningkatan berdasarkan penggunaan Anda saat ini.

Alat

Tipe

Versi yang mendukung V4

Panduan peningkatan

OSS SDK

Java

Versi 3.17.4 dan yang lebih baru

OSS SDK

Python V2

Semua versi

Python V1

Versi 2.18.4 dan yang lebih baru

Go V2

Semua versi

Go V1

Versi 3.0.2 dan yang lebih baru

PHP V2

Semua versi

PHP V1

Versi 2.7.0 dan yang lebih baru

C# V2

Semua versi

C# V1

Versi 2.14.0 dan yang lebih baru

JavaScript

Versi 6.20.0 dan yang lebih baru

C++

Versi 1.10.0 dan yang lebih baru

C

Versi 3.11.0 dan yang lebih baru

Swift

Semua versi

Objective-C

Versi 2.11.1 dan yang lebih baru

Android

Versi 2.3 dan yang lebih baru

ossutil

ossutil 2.0

Semua versi

ossutil

ossutil 1.0

Versi 1.7.12 dan yang lebih baru

ossfs

ossfs 2.0

Semua versi

ossfs

ossfs 1.0

Versi 1.91.4 dan yang lebih baru

API (konstruksi tanda tangan manual)

Untuk informasi tentang cara meningkatkan algoritma tanda tangan V1 yang dibuat secara manual ke V4, lihat API (konstruksi tanda tangan manual).

Konsol OSS

OSS ditingkatkan secara otomatis. Prosesnya transparan bagi pengguna.

OSS SDK

Java

  1. Tingkatkan OSS Java SDK ke versi 3.17.4 atau yang lebih baru.

  2. Saat menginisialisasi OSS Client dengan Signature V4, ikuti langkah-langkah berikut:

    • Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

    • Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4, seperti: SignVersion.V4.

Contoh kode

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 {
        // Tentukan endpoint wilayah tempat bucket berada. Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan ID wilayah bucket. Dalam contoh ini, ID wilayah China (Hangzhou) digunakan: cn-hangzhou.
        String region = "cn-hangzhou";

        // Dapatkan kredensial dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

        // Buat instance OSSClient.
        // Saat Anda tidak lagi menggunakan instance OSSClient, panggil metode shutdown untuk melepaskan sumber daya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();
        
        // Gunakan instance OSSClient untuk mengirim permintaan, seperti mengunggah, mengunduh, atau mengelola objek.
        
        // Saat Anda tidak lagi menggunakan instance OSSClient, panggil metode shutdown untuk melepaskan sumber daya.
        ossClient.shutdown();
    }
}

Python

Python SDK V2

  1. Semua versi OSS Python SDK V2 mendukung Signature V4 secara default.

  2. Saat menginisialisasi OSS Client dengan Signature V4, lakukan langkah berikut:

    Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

Contoh kode

import alibabacloud_oss_v2 as oss

def main():
    # Dapatkan kredensial akses dari variabel lingkungan untuk autentikasi.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Muat konfigurasi default SDK dan tentukan penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Metode 1: Tentukan hanya wilayah.
    # Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
    cfg.region = 'cn-hangzhou'

    # # Metode 2: Tentukan endpoint dan wilayah.
    # # Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
    # cfg.region = 'cn-hangzhou'
    # # Tentukan endpoint publik wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com.
    # # Untuk menggunakan protokol HTTP, atur endpoint menjadi http://oss-cn-hangzhou.aliyuncs.com.
    # cfg.endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

    # Gunakan konfigurasi untuk membuat instance Client.
    client = oss.Client(cfg)

    # Gunakan instance Client untuk melakukan operasi selanjutnya.

# Panggil fungsi utama saat skrip dijalankan langsung.
if __name__ == "__main__":
    main()  # Titik masuk skrip. Saat skrip dijalankan langsung, fungsi utama dipanggil.

Python SDK V1

  1. Tingkatkan OSS Python SDK V1 ke versi 2.18.4 atau yang lebih baru.

  2. Saat menginisialisasi OSS Client dengan Signature V4, lakukan langkah-langkah berikut:

    • Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

    • Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4. Contohnya: oss2.ProviderAuthV4.

Contoh kode

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

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode contoh, pastikan bahwa variabel lingkungan telah dikonfigurasi. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = 'yourEndpoint'
# Tentukan wilayah endpoint. Contoh: cn-hangzhou. 
region = 'cn-hangzhou'

# Tentukan nama bucket. 
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region) 

Go

Go SDK V2

  1. Semua versi OSS Go SDK V2 mendukung Signature V4 secara default.

  2. Saat menginisialisasi OSS Client dengan Signature V4, lakukan langkah berikut:

    Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

Contoh kode

package main

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

func main() {
	// Metode 1: Tentukan hanya wilayah.
	// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-hangzhou")

	// Metode 2: Tentukan endpoint dan wilayah.
	// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
	// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. Untuk menggunakan protokol HTTP, atur endpoint menjadi http://oss-cn-hangzhou.aliyuncs.com
	// cfg := oss.LoadDefaultConfig().
	//     WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	//     WithRegion("cn-hangzhou").
	//     WithEndpoint("https://oss-cn-hangzhou.aliyuncs.com")

	// Buat instance OSSClient
	client := oss.NewClient(cfg)

	// Gunakan instance OSSClient untuk melakukan operasi selanjutnya...
}

Go SDK V1

Catatan

Semua versi Go SDK V2 mendukung Signature V4 secara default. Kami merekomendasikan Anda bermigrasi dari Go SDK V1 ke Go SDK V2.

  1. Tingkatkan OSS Go SDK V1 ke versi 3.0.2 atau yang lebih baru.

  2. Saat menginisialisasi OSS Client dengan Signature V4, lakukan langkah-langkah berikut:

    • Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

    • Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4. Contohnya: oss.AuthV4.

Contoh kode

package main

import (
	"log"

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

// Panggil handleError untuk menangani kesalahan yang tidak dapat diperbaiki dan hentikan program setelah mencatat pesan kesalahan.
func handleError(err error) {
	log.Fatalf("Error: %v", err)
}

// Gunakan setupClient untuk membuat dan mengonfigurasi instance OSSClient.
// Parameter:
//
//	endpoint: endpoint wilayah tempat bucket berada.
//	region: wilayah tempat bucket berada.
//
// Kembalikan instance OSSClient yang dibuat.
func setupClient(endpoint, region string) (*oss.Client, error) {
	// Dapatkan kredensial akses dari variabel lingkungan.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		return nil, err
	}

	// Buat instance OSSClient dan gunakan algoritma tanda tangan 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() {
	// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint sebenarnya Anda.
	endpoint := "yourEndpoint"

	// Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou.
	region := "yourRegion"

	// Periksa apakah variabel lingkungan telah dikonfigurasi.
	if endpoint == "" || region == "" {
		log.Fatal("Silakan atur yourEndpoint dan yourRegion.")
	}

	// Buat dan konfigurasikan instance OSSClient.
	client, err := setupClient(endpoint, region)
	if err != nil {
		handleError(err)
	}

	// Tampilkan informasi klien.
	log.Printf("Client: %#v\n", client)
}

PHP

PHP SDK V2

  1. Semua versi OSS PHP SDK V2 mendukung Signature V4 secara default.

  2. Saat menginisialisasi OSS Client dengan Signature V4, lakukan langkah berikut:

    Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Contohnya, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

<?php

// Sertakan file autoload untuk memuat dependensi.
require_once __DIR__ . '/../vendor/autoload.php;

use AlibabaCloud\Oss\V2 as Oss;

// Gunakan EnvironmentVariableCredentialsProvider untuk mengambil AccessKey ID dan AccessKey secret dari variabel lingkungan.    
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# Muat konfigurasi default SDK dan tentukan penyedia kredensial.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // Tentukan penyedia kredensial.

// Metode 1: Tentukan hanya wilayah.
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
$cfg->setRegion(region: "cn-hangzhou");

// // Metode 2: Tentukan endpoint dan wilayah.
// // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
// // Tentukan endpoint publik wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com.
// // Untuk menggunakan protokol HTTP, atur endpoint menjadi http://oss-cn-hangzhou.aliyuncs.com.
// $cfg->setRegion(region: 'cn-hangzhou')->setEndpoint(endpoint: 'https://oss-cn-hangzhou.aliyuncs.com');

// Buat instance OSSClient.
$client = new Oss\Client($cfg);

// Gunakan instance OSSClient untuk melakukan operasi selanjutnya.

PHP SDK V1

  1. Tingkatkan OSS PHP SDK V1 ke versi 2.7.0 atau yang lebih baru.

  2. Saat menginisialisasi OSS Client dengan Signature V4, lakukan langkah-langkah berikut:

    • Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Contohnya, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

    • Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4. Contohnya: OSS_SIGNATURE_VERSION_V4.

Contoh kode

<?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 {
    // Dapatkan kredensial akses dari variabel lingkungan dan simpan dalam penyedia. Sebelum Anda menjalankan kode contoh ini, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
    $provider = new EnvironmentVariableCredentialsProvider();
    // Tentukan Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint menjadi 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,
        // Tentukan wilayah yang sesuai dengan Endpoint. Misalnya, cn-hangzhou.
        "region" => "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
} catch (OssException $e) {
    printf($e->getMessage() . "\n");
    return;
}

C#

C# SDK V2

  1. Semua versi OSS C# SDK V2 mendukung Signature V4 secara default.

  2. Saat menginisialisasi OSS Client dengan Signature V4, lakukan langkah berikut:

    Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

using OSS = AlibabaCloud.OSS.V2; // Buat alias untuk Alibaba Cloud OSS SDK untuk menyederhanakan penggunaan selanjutnya

var region = "cn-hangzhou"; // Wajib. Atur wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
var endpoint = null as string;  // Opsional. Tentukan endpoint yang digunakan untuk mengakses layanan OSS. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com

// Muat konfigurasi default OSS SDK, yang secara otomatis membaca informasi kredensial (seperti AccessKey) dari variabel lingkungan
var cfg = OSS.Configuration.LoadDefault();
// Secara eksplisit atur untuk menggunakan variabel lingkungan untuk mendapatkan kredensial untuk autentikasi (format: OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// Atur wilayah bucket dalam konfigurasi
cfg.Region = region;
// Jika endpoint ditentukan, timpa endpoint default
if(endpoint != null)
{
    cfg.Endpoint = endpoint;
}

// Buat instance OSS client menggunakan informasi konfigurasi
using var client = new OSS.Client(cfg);

// Gunakan instance client yang dibuat untuk melakukan operasi selanjutnya...

C# SDK V1

  1. Tingkatkan OSS C# SDK V1 ke versi 2.14.0 atau yang lebih baru.

  2. Saat menginisialisasi OSS Client dengan Signature V4, lakukan langkah-langkah berikut:

    • Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

    • Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4. Contohnya: SignVersion.V4.

Contoh kode

using Aliyun.OSS;
using Aliyun.OSS.Common;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode contoh, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret=Environment.GetEnvironmentVariable ("OSS_ACCESS_KEY_SECRET"); 

// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. 
const string endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. 
const string region = "cn-hangzhou";

// Buat instance ClientConfiguration dan modifikasi parameter default berdasarkan kebutuhan Anda. 
var conf = new ClientConfiguration();

// Tentukan tanda tangan V4. 
conf.SignatureVersion = SignatureVersion.V4;

// Buat instance OSSClient. 
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);

Node.js

  1. Tingkatkan OSS Node.js SDK ke versi 6.20.0 atau yang lebih baru.

  2. Saat menginisialisasi OSS Client dengan Signature V4, ikuti langkah-langkah berikut:

    • Tentukan ID wilayah OSS khusus bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah oss-cn-hangzhou.

    • Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4. Contohnya: authorizationV4.

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

const client = new OSS({
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode contoh, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
  region: 'oss-cn-hangzhou',
  // Gunakan algoritma tanda tangan V4
  authorizationV4: true,
  // Tentukan nama bucket.
  bucket: 'yourBucketName',
  // Tentukan endpoint publik untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
});

Browser.js

  1. Tingkatkan OSS Browser.js SDK ke versi 6.20.0 atau yang lebih baru.

  2. Saat menginisialisasi OSS Client dengan Signature V4, ikuti langkah-langkah berikut:

    • Tentukan ID wilayah OSS khusus bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah oss-cn-hangzhou.

    • Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4. Contohnya: authorizationV4.

Contoh kode

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <!-- Impor file 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({
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou. 
        region: 'yourRegion',
	authorizationV4: true,
        // Tentukan pasangan AccessKey sementara yang diperoleh dari Security Token Service (STS). Pasangan AccessKey terdiri dari AccessKey ID dan AccessKey secret. 
        accessKeyId: 'yourAccessKeyId',
        accessKeySecret: 'yourAccessKeySecret',
        // Tentukan token keamanan yang diperoleh dari STS. 
        stsToken: 'yourSecurityToken',
        // Tentukan nama bucket. Contoh: examplebucket. 
        bucket: "examplebucket",
      });
    </script>
  </body>
</html>

C++

  1. Tingkatkan OSS C++ SDK ke versi 1.10.0 atau yang lebih baru.

  2. Saat menginisialisasi OSS Client dengan Signature V4, ikuti langkah-langkah berikut:

    • Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

    • Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4. Contohnya: SignatureVersionType::V4.

Contoh kode

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

int main(void)
{
    /* Inisialisasi informasi tentang akun yang digunakan untuk mengakses OSS. */
            
    /* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. */
    std::string Region = "yourRegion";
    
    /* Inisialisasi sumber daya, seperti sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode contoh, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Lepaskan sumber daya, seperti sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

C

  1. Tingkatkan OSS C SDK ke versi 3.11.0 atau yang lebih baru.

  2. Saat menginisialisasi OSS Client dengan Signature V4, lakukan langkah-langkah berikut:

    • Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

    • Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4. Contohnya: signature_version = 4.

Contoh kode

#include "oss_api.h"
#include "aos_http_io.h"
/* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. */
const char *region = "yourRegion";

void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Gunakan string char* untuk menginisialisasi tipe data aos_string_t. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode contoh, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */  
    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"));
    // Tentukan dua parameter tambahan.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Tentukan apakah akan menggunakan CNAME untuk mengakses OSS. Nilai 0 menunjukkan bahwa CNAME tidak digunakan. */
    options->config->is_cname = 0;
    /* Tentukan parameter jaringan. Parameter kedua dalam fungsi ini menentukan kepemilikan ctl. Secara default, nilai parameter kedua adalah 0. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main() {
    aos_pool_t *p;
    oss_request_options_t *options;
    /* Inisialisasi variabel global. Anda hanya perlu menginisialisasi variabel global sekali dalam siklus hidup program. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        return -1;
    }
    /* Inisialisasi pool memori dan opsi. */
    aos_pool_create(&p, NULL);
    options = oss_request_options_create(p);
    init_options(options);
    /* Kode logika. Dalam contoh ini, kode logika dihilangkan. */
    /* Lepaskan pool memori. Operasi ini melepaskan sumber daya memori yang dialokasikan untuk permintaan. */
    aos_pool_destroy(p);
    /* Lepaskan sumber daya global yang dialokasikan. Anda hanya perlu melepaskan sumber daya global sekali dalam siklus hidup program. */
    aos_http_io_deinitialize();
    return 0;
}

Swift

  1. Semua versi OSS Swift SDK mendukung Signature V4 secara default.

  2. Saat menginisialisasi OSS Client dengan Signature V4, Anda harus mengikuti langkah berikut:

    Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

import AlibabaCloudOSS
import Foundation

@main
struct Main {
    static func main() async {
        // Tentukan wilayah tempat bucket berada. Contoh: China (Hangzhou) adalah cn-hangzhou.
        let region = "cn-hangzhou"
        // Opsional. Tentukan endpoint untuk mengakses OSS. Untuk China (Hangzhou), atur Endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com.
        let endpoint: String? = nil

        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode ini, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
        let credentialsProvider = EnvironmentCredentialsProvider()

        // Konfigurasikan parameter klien OSS.
        let config = Configuration.default()
            .withRegion(region)        // Atur wilayah tempat bucket berada.
            .withCredentialsProvider(credentialsProvider)  // Atur kredensial akses.
            
        // Atur endpoint kustom.
        if let endpoint = endpoint {
            config.withEndpoint(endpoint)
        }
        
        // Buat instance klien OSS.
        let client = Client(config)
    }
}

iOS

  1. Perbarui OSS iOS SDK ke versi 2.11.1 atau yang lebih baru.

  2. Saat menginisialisasi OSS Client dengan Signature V4, ikuti langkah-langkah berikut:

    • Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

    • Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4, seperti: OSSSignVersionV4.

Contoh kode

// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. 
NSString *endpoint = @"yourEndpoint";
// Tentukan pasangan AccessKey sementara yang diperoleh dari STS. Pasangan AccessKey terdiri dari AccessKey ID dan AccessKey secret. 
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// Tentukan token keamanan yang diperoleh dari STS. 
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. Tingkatkan OSS Android SDK ke versi 2.3 atau yang lebih baru.

  2. Saat menginisialisasi OSS Client dengan Signature V4, ikuti langkah-langkah berikut:

    • Tentukan ID wilayah bucket sebagai pengenal untuk wilayah permintaan. Sebagai contoh, ID wilayah untuk China (Hangzhou) adalah cn-hangzhou.

    • Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4. Contohnya: SignVersion.V4.

Contoh kode

// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. 
String endpoint = "yourEndpoint";
// Tentukan pasangan AccessKey sementara yang diperoleh dari STS. 
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// Tentukan token keamanan yang diperoleh dari STS. 
String securityToken = "yourSecurityToken";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
String region = "yourRegion";

OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// Buat instance OSSClient. 
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);

ossutil

ossutil 2.0

Semua versi antarmuka baris perintah ossutil 2.0 mendukung Signature V4 secara default.

Dibandingkan dengan Signature V1, saat menggunakan Signature V4, Anda harus mengatur parameter Region ke ID wilayah bucket ketika mengonfigurasi ossutil.

Perintah contoh

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

ossutil 1.0

Catatan

Semua versi ossutil 2.0 mendukung Signature V4 secara default. Kami merekomendasikan Anda untuk bermigrasi dari ossutil 1.0 ke ossutil 2.0.

Versi 1.7.12 dan yang lebih baru dari antarmuka baris perintah ossutil 1.0 mendukung Signature V4.

Dibandingkan dengan Signature V1, saat menggunakan Signature V4, Anda harus melakukan hal berikut dalam perintah:

  • Atur opsi --sign-version menjadi v4.

  • Atur opsi --region ke ID wilayah bucket.

Perintah contoh

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

ossfs

ossfs 2.0

Semua versi ossfs 2.0 (Pratinjau) mendukung Signature V4, tetapi menggunakan Signature V1 secara default.

  1. Sebelum melakukan peningkatan, jalankan perintah ossfs --version untuk memeriksa versi saat ini dan selesaikan prasyarat berikut sesuai dengan versi Anda.

    Penting

    Penghapusan instalasi akan mengganggu layanan Anda. Kami menyarankan untuk melaksanakan operasi ini selama jam-jam sepi.

    Lepaskan sistem file OSS yang telah dipasang. Ganti <mountpoint> dengan direktori aktual Anda.

    sudo umount <mountpoint>

    Setelah dilepas, ikuti perintah contoh untuk meningkatkan.

  2. Dibandingkan dengan Signature V1, ketika menggunakan Signature V4, Anda harus melakukan hal berikut dalam perintah mount:

Perintah Contoh

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

ossfs 1.0

Versi 1.91.4 dan yang lebih baru dari ossfs 1.0 mendukung Signature V4.

  1. Sebelum melakukan peningkatan, jalankan perintah ossfs --version untuk memeriksa versi saat ini dan selesaikan prasyarat berikut sesuai dengan versi Anda.

    Penting

    Penghapusan instalasi akan mengganggu layanan Anda. Kami menyarankan untuk melaksanakan operasi ini selama jam-jam sepi.

    Tingkatkan ke V4 jika persyaratan versi terpenuhi

    Lepaskan sistem file OSS yang telah dipasang. Ganti <mountpoint> dengan direktori aktual Anda.

    sudo umount <mountpoint>

    Setelah dilepas, ikuti Perintah Contoh untuk meningkatkan.

    Tingkatkan ke V4 jika persyaratan versi tidak terpenuhi

    1. Lepaskan sistem file OSS yang telah dipasang. Ganti <mountpoint> dengan direktori aktual Anda.

      sudo umount <mountpoint>
    2. Hapus versi lama.

      Jika Anda menginstal ossfs menggunakan manajer paket seperti apt atau yum, jalankan perintah berikut:

      sudo apt remove ossfs  # Untuk sistem Ubuntu/Debian
      sudo yum remove ossfs  # Untuk sistem CentOS/Anolis/Alibaba Cloud Linux

      Jika Anda mengompilasi dan menginstal ossfs dari kode sumber, masuk ke direktori instalasi dan jalankan perintah berikut:

      sudo make uninstall
    3. Unduh dan instal versi baru.

    Setelah menginstal versi baru, ikuti Perintah Contoh untuk meningkatkan.

  2. Dibandingkan dengan Signature V1, ketika menggunakan Signature V4, Anda harus melakukan hal berikut dalam perintah mount:

  • Atur opsi sigv4.

  • Atur opsi region ke ID Wilayah bucket.

Perintah Contoh

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

API (konstruksi tanda tangan manual)

Kami menyarankan Anda menggunakan kit pengembangan perangkat lunak (SDK) OSS untuk mengirim permintaan karena SDK secara otomatis menghitung tanda tangan. Jika SDK OSS tidak dapat digunakan, Anda harus membangun tanda tangan V4 secara manual dan memastikan bahwa permintaannya valid.

Metode tanda tangan

Deskripsi

Referensi

Sertakan tanda tangan di header

Di OSS, metode yang paling umum untuk verifikasi identitas adalah dengan menyertakan tanda tangan di Authorization header dari permintaan HTTP. Semua operasi OSS, kecuali yang menggunakan tanda tangan POST atau tanda tangan URL, memerlukan autentikasi melalui Authorization header.

Sertakan tanda tangan V4 di header

Sertakan tanda tangan di URL

Anda dapat memberikan akses pihak ketiga ke Sumber daya OSS Anda untuk periode validitas tertentu tanpa mengungkapkan Kredensial akses Anda dengan menghasilkan URL yang ditandatangani yang mencakup tanda tangan dan informasi permintaan lainnya yang diperlukan.

Sertakan tanda tangan V4 di URL

Tanda tangan permintaan POST

Tanda tangan PostObject adalah mekanisme yang memungkinkan Anda mengunggah file langsung ke OSS melalui formulir HTML. Mekanisme ini memungkinkan pengguna untuk membuat formulir HTML pada Klien, seperti peramban web. Formulir tersebut mencakup bidang untuk file yang akan diunggah dan parameter lainnya yang diperlukan, seperti tanda tangan, Pasangan Kunci Akses, nama bucket, dan kunci objek. Saat formulir dikirim, informasi ini dikirim ke OSS melalui permintaan HTTP POST, dan OSS memverifikasi validitas permintaan POST tersebut.

Tanda tangan V4 untuk permintaan POST

Jadwal penghentian dan dampak dari Signature V1

Berdasarkan Pengumuman Penghentian Signature Versi 1 untuk Alibaba Cloud Object Storage Service, Signature V1 untuk Alibaba Cloud Object Storage Service akan secara bertahap dihentikan bagi pelanggan baru (UID baru) mulai 1 Maret 2025. Mulai 1 September 2025, Signature V1 tidak akan lagi diperbarui, dipelihara, atau tersedia untuk bucket baru.

Perbandingan antara Signature V1 dan Signature V4

Item

Signature V1

Signature V4

Algoritma tanda tangan

HMAC-SHA1

HMAC-SHA256

Periode validitas URL bertanda tangan

Waktu penandatanganan bisa lebih dari 7 hari di masa lalu. Periode validitas dapat melebihi 7 hari.

Waktu penandatanganan dibatasi hingga 7 hari ke belakang. Periode validitas dibatasi hingga 7 hari.

Konstruksi string tanda tangan

String tanda tangan mencakup metode HTTP, Content-MD5, Content-Type, tanggal, header yang dinormalisasi, dan jalur sumber daya.

String tanda tangan memiliki struktur yang lebih kompleks, mencakup metode permintaan, URI yang dinormalisasi, parameter kueri yang dinormalisasi, header yang dinormalisasi, header tambahan yang ditandatangani, dan hash muatan.

Header dan parameter kueri yang dinormalisasi

Hanya header dengan awalan `x-oss-` yang dinormalisasi. Hanya beberapa parameter kueri yang disertakan dalam tanda tangan.

Semua header dengan awalan `x-oss-` dan header bertanda tangan default (seperti `content-type` dan `content-md5`) dinormalisasi. Header tambahan yang ditandatangani juga didukung.

Pengkodean jalur sumber daya

Karakter garis miring (/) dalam jalur sumber daya dikodekan.

Karakter / dalam jalur sumber daya tidak diloloskan, sedangkan karakter / dalam parameter kueri harus diloloskan sebagai %2F.

Format timestamp dan tanggal

Menggunakan format tanggal HTTP standar, misalnya, Wed, 21 Oct 2015 07:28:00 GMT.

Menggunakan format ISO 8601 untuk waktu UTC, misalnya, 20151021T072800Z.

Informasi wilayah

Tanda tangan tidak mencakup informasi wilayah.

Aturan tanda tangan memperkenalkan konsep wilayah. Baik string tanda tangan maupun kunci tanda tangan harus mencakup ID wilayah.

FAQ

Bagaimana cara memeriksa dengan cepat apakah saya menggunakan Signature V1 atau Signature V4?

Anda dapat menggunakan LogSearch atau alat pengambilan paket seperti Wireshark atau Fiddler untuk melihat bidang Authorization di dalam header permintaan HTTP yang dikirim ke OSS.

  • Signature V1: Bidang Authorization dimulai dengan OSS dan memiliki format berikut:

    Authorization: OSS <AccessKeyId>:<Signature>
  • Signature V4: Bidang Authorization dimulai dengan OSS4-HMAC-SHA256 dan memiliki format berikut:

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

Bagaimana cara dengan cepat menganalisis kesalahan SignatureDoesNotMatch

Jika perhitungan tanda tangan salah, sistem akan mengembalikan kode kesalahan SignatureDoesNotMatch. Untuk menemukan masalah dengan cepat, Anda dapat membandingkan informasi terkait tanda tangan yang dihasilkan oleh server dan klien. Tanggapan dari server mencakup informasi kunci berikut:

  • CanonicalRequest: String kueri kanonis yang dihasilkan oleh server.

  • StringToSign: String-to-sign yang dihasilkan oleh server berdasarkan permintaan yang telah dikanonisasi.

  • Signature: Nilai tanda tangan akhir yang dihitung oleh server.

Dengan membandingkan bidang-bidang ini dengan bidang yang sesuai yang dihasilkan oleh klien, Anda dapat dengan cepat mengidentifikasi perbedaan dan menemukan sumber kesalahan. Contohnya:

  • Jika CanonicalRequest tidak konsisten, urutan penyambungan atau format parameter permintaan mungkin salah.

  • Jika StringToSign tidak konsisten, tanggal, wilayah, atau informasi produk cloud mungkin disetel secara salah.

  • Jika Signature tidak konsisten, mungkin ada masalah dengan perhitungan kunci turunan atau implementasi algoritma tanda tangan.