Tous les produits
Search
Centre de documentation

Object Storage Service:Guide to upgrading from Signature V1 to Signature V4

Dernière mise à jour :Oct 09, 2026

Afin de renforcer la sécurité, Object Storage Service (OSS) abandonne progressivement la signature V1. Migrez vers la signature V4 dès que possible pour garantir le bon fonctionnement de vos applications.

Instructions

Procédure de migration de la signature V1 vers la signature V4

Suivez le guide correspondant pour effectuer la migration en fonction de votre utilisation actuelle.

Outil

Type

Versions prenant en charge la signature V4

Guide de migration

OSS SDK

Java

Version 3.17.4 et ultérieure

OSS SDK

Python V2

Toutes les versions

Python V1

Version 2.18.4 et ultérieure

Go V2

Toutes les versions

Go V1

Version 3.0.2 et ultérieure

PHP V2

Toutes les versions

PHP V1

Version 2.7.0 et ultérieure

C# V2

Toutes les versions

C# V1

Version 2.14.0 et ultérieure

JavaScript

Version 6.20.0 et ultérieure

C++

Version 1.10.0 et ultérieure

C

Version 3.11.0 et ultérieure

Swift

Toutes les versions

Objective-C

Version 2.11.1 et ultérieure

Android

Version 2.3 et ultérieure

ossutil

ossutil 2,0

Toutes les versions

ossutil

ossutil 1,0

Version 1.7.12 et ultérieure

ossfs

ossfs 2,0

Toutes les versions

ossfs

ossfs 1,0

Version 1.91.4 et ultérieure

API (construction manuelle de la signature)

Pour savoir comment migrer un algorithme de signature V1 construit manuellement vers la version V4, consultez la section API (construction manuelle de la signature).

Console OSS

La mise à niveau d'OSS est automatique. Le processus est transparent pour les utilisateurs.

OSS SDK

Java

  1. Mettez à jour le SDK OSS pour Java vers la version 3.17.4 ou une version ultérieure.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez suivre les étapes ci-dessous :

    • Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

    • Déclarez explicitement l'utilisation de l'algorithme de signature V4. Par exemple : SignVersion.V4.

Exemple de code

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 {
        // Specify the endpoint of the region in which the bucket is located. In this example, the endpoint of the China (Hangzhou) region is used.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Specify the ID of the region of the bucket. In this example, the ID of the China (Hangzhou) region is used: cn-hangzhou.
        String region = "cn-hangzhou";

        // Obtain credentials from the environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

        // Create an OSSClient instance.
        // When you no longer use the OSSClient instance, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Explicitly declare the use of the V4 signature algorithm.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();
        
        // Use the OSSClient instance to initiate requests, such as uploading, downloading, or managing objects.
        
        // When you no longer use the OSSClient instance, call the shutdown method to release resources.
        ossClient.shutdown();
    }
}

Python

Python V2

  1. Toutes les versions du SDK OSS pour Python V2 prennent en charge la signature V4 par défaut.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez suivre l'étape ci-dessous :

    Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

Exemple de code

import alibabacloud_oss_v2 as oss

def main():
    # Obtain access credentials from environment variables for authentication.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Load the default configuration of the SDK and specify the credential provider.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Method 1: Specify only the region.
    # Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
    cfg.region = 'cn-hangzhou'

    # # Method 2: Specify the endpoint and region.
    # # Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
    # cfg.region = 'cn-hangzhou'
    # # Specify the public endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
    # # To use the HTTP protocol, set the endpoint to http://oss-cn-hangzhou.aliyuncs.com.
    # cfg.endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

    # Use the configuration to create a Client instance.
    client = oss.Client(cfg)

    # Use the Client instance to perform subsequent operations.

# Call the main function when the script is directly run.
if __name__ == "__main__":
    main()  # The entry point of the script. When the script is directly run, the main function is called.

Python V1

  1. Mettez à jour le SDK OSS pour Python V1 vers la version 2.18.4 ou une version ultérieure.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez suivre les étapes ci-dessous :

    • Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

    • Déclarez explicitement l'utilisation de l'algorithme de signature V4. Par exemple : oss2.ProviderAuthV4.

Exemple de code

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

# Obtain access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = 'yourEndpoint'
# Specify the region of the endpoint. Example: cn-hangzhou. 
region = 'cn-hangzhou'

# Specify the name of the bucket. 
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region) 

Go

Go V2

  1. Toutes les versions du SDK OSS pour Go V2 prennent en charge la signature V4 par défaut.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez suivre l'étape ci-dessous :

    Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

Exemple de code

package main

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

func main() {
	// Method 1: Specify only the region.
	// Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-hangzhou")

	// Method 2: Specify the endpoint and region.
	// Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
	// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. To use the HTTP protocol, set the endpoint to http://oss-cn-hangzhou.aliyuncs.com
	// cfg := oss.LoadDefaultConfig().
	//     WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	//     WithRegion("cn-hangzhou").
	//     WithEndpoint("https://oss-cn-hangzhou.aliyuncs.com")

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

	// Use the OSSClient instance to perform subsequent operations...
}

Go V1

Remarque

Toutes les versions du SDK OSS pour Go V2 prennent en charge la signature V4 par défaut. Effectuez la migration de Go V1 vers Go V2.

  1. Mettez à jour le SDK OSS pour Go V1 vers la version 3.0.2 ou une version ultérieure.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez suivre les étapes ci-dessous :

    • Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

    • Déclarez explicitement l'utilisation de l'algorithme de signature V4. Par exemple : oss.AuthV4.

Exemple de code

package main

import (
	"log"

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

// handleError handles unrecoverable errors, logs the error message, and terminates the program.
func handleError(err error) {
	log.Fatalf("Error: %v", err)
}

// setupClient sets up and creates an OSS client instance.
// Parameters:
//	endpoint - The endpoint of the bucket.
//	region - The region that corresponds to the endpoint.
//
// Returns the created OSS client instance.
func setupClient(endpoint, region string) (*oss.Client, error) {
	// Obtain access credentials from environment variables.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		return nil, err
	}

	// Create an OSSClient instance and use a V4 signature.
	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() {
	// Set yourEndpoint to the endpoint of the bucket. For example, for China (Hangzhou), set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. For other regions, use the actual endpoint.
	endpoint := "yourEndpoint"

	// Set yourRegion to the region that corresponds to the endpoint, for example, cn-hangzhou.
	region := "yourRegion"

	// Check if the environment variables are set. Also check for empty strings and placeholder values.
	if endpoint == "" || region == "" || endpoint == "yourEndpoint" || region == "yourRegion" {
		log.Fatal("Please set yourEndpoint and yourRegion with valid values.")
	}

	// Set up and create an OSS client instance.
	client, err := setupClient(endpoint, region)
	if err != nil {
		handleError(err)
	}

	// Print the client information.
	log.Printf("Client: %#v\n", client)
}

PHP

PHP V2

  1. Toutes les versions du SDK OSS pour PHP V2 prennent en charge la signature V4 par défaut.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez suivre l'étape ci-dessous :

    Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

<?php

// Include the autoload file to load dependencies.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Use EnvironmentVariableCredentialsProvider to retrieve the AccessKey ID and AccessKey secret from environment variables.    
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# Load the default configuration of the SDK and specify the credential provider.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // Specify the credential provider.

// Method 1: Specify only the region.
// Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
$cfg->setRegion(region: "cn-hangzhou");

// // Method 2: Specify the endpoint and region.
// // Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
// // Specify the public endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
// // To use the HTTP protocol, set the endpoint to http://oss-cn-hangzhou.aliyuncs.com.
// $cfg->setRegion(region: 'cn-hangzhou')->setEndpoint(endpoint: 'https://oss-cn-hangzhou.aliyuncs.com');

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

// Use the OSSClient instance to perform subsequent operations.

PHP V1

  1. Mettez à jour le SDK OSS pour PHP V1 vers la version 2.7.0 ou une version ultérieure.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez suivre les étapes ci-dessous :

    • Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

    • Déclarez explicitement l'utilisation de l'algorithme de signature V4. Par exemple : OSS_SIGNATURE_VERSION_V4.

Exemple de code

<?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 {
    // Obtain access credentials from environment variables and save them to the provider. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
    $provider = new EnvironmentVariableCredentialsProvider();
    // Specify the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to 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,
        // Specify the region that corresponds to the endpoint. For example, specify cn-hangzhou.
        "region" => "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
} catch (OssException $e) {
    printf($e->getMessage() . "\n");
    return;
}

C#

C# V2

  1. Toutes les versions du SDK OSS pour C# V2 prennent en charge la signature V4 par défaut.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez suivre l'étape ci-dessous :

    Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

using OSS = AlibabaCloud.OSS.V2; // Create an alias for Alibaba Cloud OSS SDK to simplify subsequent use. var region = "cn-hangzhou"; // Required. Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. var endpoint = null as string; // Optional. Specify the endpoint for accessing OSS. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. // Load the default configuration of the SDK, which automatically reads credentials (such as AccessKey) from environment variables. var cfg = OSS.Configuration.LoadDefault(); // Explicitly use environment variables to obtain credentials for authentication. (Format: OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET) cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider(); // Set the region in the configuration. cfg.Region = region; // If an endpoint is specified, overwrite the default endpoint. if(endpoint != null) { cfg.Endpoint = endpoint; } // Use the configuration to create a Client instance. using var client = new OSS.Client(cfg); // Use the Client instance to perform subsequent operations.

C# V1

  1. Mettez à jour le SDK OSS pour C# V1 vers la version 2.14.0 ou une version ultérieure.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez suivre les étapes ci-dessous :

    • Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

    • Déclarez explicitement l'utilisation de l'algorithme de signature V4. Par exemple : SignVersion.V4.

Exemple de code

using Aliyun.OSS;
using Aliyun.OSS.Common;
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");

// Specify the Endpoint for the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com.
const string endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

// Specify the Region ID for the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Region ID to cn-hangzhou.
const string region = "cn-hangzhou";

// Create a ClientConfiguration instance and modify the default parameters as needed.
var conf = new ClientConfiguration();

// Set the signature version to V4.
conf.SignatureVersion = SignatureVersion.V4;

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

Node.js

  1. Mettez à jour le SDK OSS pour Node.js vers la version 6.20.0 ou ultérieure.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez effectuer les étapes suivantes :

    • Spécifiez l'ID de région OSS dédié du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est oss-cn-hangzhou.

    • Déclarez explicitement l'utilisation de l'algorithme de signature V4. Par exemple : authorizationV4.

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

const client = new OSS({
  // Obtain access credentials from environment variables. Before you run this code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // Set region to the region where the bucket is located. For example, for China (Hangzhou), set region to oss-cn-hangzhou.
  region: 'oss-cn-hangzhou',
  // Use the Signature V4 algorithm.
  authorizationV4: true,
  // Set bucket to the name of your bucket.
  bucket: 'yourBucketName',
  // Set endpoint to the public endpoint of the region where the bucket is located. For example, for China (Hangzhou), set endpoint to https://oss-cn-hangzhou.aliyuncs.com.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
});

Browser.js

  1. Mettez à jour le SDK OSS pour Browser.js vers la version 6.20.0 ou ultérieure.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez effectuer les étapes suivantes :

    • Spécifiez l'ID de région OSS dédié du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est oss-cn-hangzhou.

    • Déclarez explicitement l'utilisation de l'algorithme de signature V4. Par exemple : authorizationV4.

Exemple de code

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <!--Import the SDK file.-->
    <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({
        // Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set yourRegion to oss-cn-hangzhou.
        region: 'yourRegion',
	authorizationV4: true,
        // The temporary AccessKey pair (AccessKey ID and AccessKey secret) obtained from Security Token Service (STS).
        accessKeyId: 'yourAccessKeyId',
        accessKeySecret: 'yourAccessKeySecret',
        // The security token obtained from STS.
        stsToken: 'yourSecurityToken',
        // Specify the bucket name. For example, examplebucket.
        bucket: "examplebucket",
      });
    </script>
  </body>
</html>

C++

  1. Mettez à jour le SDK OSS pour C++ vers la version 1.10.0 ou ultérieure.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez effectuer les étapes suivantes :

    • Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

    • Déclarez explicitement l'utilisation de l'algorithme de signature V4. Par exemple : SignatureVersionType::V4.

Exemple de code

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

int main(void)
{
    /* Initialize the OSS account information. */
            
    /* Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou. */
    std::string Region = "yourRegion";
    
    /* Initialize resources, such as network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Obtain access credentials from environment variables. Before you run this code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Release resources, such as network resources. */
    ShutdownSdk();
    return 0;
}

C

  1. Mettez à jour le SDK OSS pour C vers la version 3.11.0 ou ultérieure.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez effectuer les étapes suivantes :

    • Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

    • Déclarez explicitement l'utilisation de l'algorithme de signature V4. Par exemple : signature_version = 4.

Exemple de code

#include "oss_api.h"
#include "aos_http_io.h"
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
const char *region = "yourRegion";

void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Use a char* string to initialize the aos_string_t data type. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */  
    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"));
    // Specify two additional parameters.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Specify whether to use CNAME to access OSS. The value 0 indicates that CNAME is not used. */
    options->config->is_cname = 0;
    /* Specify network parameters. The second parameter in this function specifies the ownership of ctl. By default, the value of the second parameter is 0. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main() {
    aos_pool_t *p;
    oss_request_options_t *options;
    /* Initialize global variables. You need to initialize global variables only once in the program lifecycle. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        return -1;
    }
    /* Initialize the memory pool and options. */
    aos_pool_create(&p, NULL);
    options = oss_request_options_create(p);
    init_options(options);
    /* The logic code. In this example, the logic code is omitted. */
    /* Release the memory pool. This operation releases the memory resources allocated for the request. */
    aos_pool_destroy(p);
    /* Release global resources that are allocated. You need to release global resources only once in the program lifecycle. */
    aos_http_io_deinitialize();
    return 0;
}

Swift

  1. Toutes les versions du SDK OSS pour Swift prennent en charge la signature V4 par défaut.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez effectuer l'étape suivante :

    Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

import AlibabaCloudOSS
import Foundation

@main
struct Main {
    static func main() async {
        // Specify the region where the bucket is located. Example: China (Hangzhou) is cn-hangzhou.
        let region = "cn-hangzhou"
        // Optional. Specify the endpoint to access OSS. For China (Hangzhou), set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com.
        let endpoint: String? = nil

        // Obtain access credentials from environment variables. Before you run this code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
        let credentialsProvider = EnvironmentCredentialsProvider()

        // Configure OSS client parameters.
        let config = Configuration.default()
            .withRegion(region)        // Set the region where the bucket is located.
            .withCredentialsProvider(credentialsProvider)  // Set the access credentials.
            
        // Set a custom endpoint.
        if let endpoint = endpoint {
            config.withEndpoint(endpoint)
        }
        
        // Create an OSS client instance.
        let client = Client(config)
    }
}

iOS

  1. Mettez à jour le SDK OSS pour iOS vers la version 2.11.1 ou ultérieure.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez effectuer les étapes suivantes :

    • Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

    • Déclarez explicitement l'utilisation de l'algorithme de signature V4. Par exemple : OSSSignVersionV4.

Exemple de code

// Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
NSString *endpoint = @"yourEndpoint";
// The temporary AccessKey pair obtained from STS, which consists of an AccessKey ID and an AccessKey secret.
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// The security token obtained from 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. Mettez à jour le SDK OSS pour Android vers la version 2.3 ou ultérieure.

  2. Lorsque vous initialisez un client OSS avec la signature V4, vous devez effectuer les étapes suivantes :

    • Spécifiez l'ID de région du bucket comme identifiant de la région de la requête. Par exemple, l'ID de région pour Chine (Hangzhou) est cn-hangzhou.

    • Déclarez explicitement l'utilisation de l'algorithme de signature V4. Par exemple : SignVersion.V4.

Exemple de code

// Set yourEndpoint to the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// The temporary AccessKey ID and AccessKey secret obtained from the STS service.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// The security token obtained from the STS service.
String securityToken = "yourSecurityToken";
// Set region to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou.
String region = "yourRegion";

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

ossutil

ossutil 2,0

Toutes les versions de l'interface de ligne de commande ossutil 2,0 prennent en charge la signature V4 par défaut.

Par rapport à la signature V1, lorsque vous utilisez la signature V4, vous devez définir le paramètre Region sur l'ID de région du bucket lors de la configuration d'ossutil.

Exemple de commande

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

ossutil 1,0

Remarque

Toutes les versions d'ossutil 2.0 prennent en charge la signature V4 par défaut. Effectuez la migration d'ossutil 1,0 vers ossutil 2,0.

Les versions 1.7.12 et ultérieures de l'interface de ligne de commande ossutil 1,0 prennent en charge la signature V4.

Par rapport à la signature V1, lorsque vous utilisez la signature V4, vous devez effectuer les actions suivantes dans la commande :

  • Définissez l'option --sign-version sur v4.

  • Définissez l'option --region sur l'ID de région du bucket.

Exemple de commande

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

ossfs

ossfs 2,0

Toutes les versions d'ossfs 2,0 (Aperçu) prennent en charge la signature V4, mais utilisent la signature V1 par défaut.

  1. Avant la mise à niveau, exécutez la commande ossfs --version pour vérifier la version actuelle et remplissez les prérequis suivants en fonction de votre version.

    Important

    La désinstallation interrompt vos services. Effectuez cette opération pendant les heures creuses.

    Démontez le système de fichiers OSS monté. Remplacez <mountpoint> par votre répertoire réel.

    sudo umount <mountpoint>

    Après le démontage, suivez l'exemple de commande pour effectuer la mise à niveau.

  2. Par rapport à la signature V1, lorsque vous utilisez la signature V4, vous devez effectuer les actions suivantes dans la commande de montage :

Exemple de commande

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

ossfs 1,0

Les versions 1.91.4 et ultérieures d'ossfs 1,0 prennent en charge la signature V4.

  1. Avant la mise à niveau, exécutez la commande ossfs --version pour vérifier la version actuelle et remplissez les prérequis suivants en fonction de votre version.

    Important

    La désinstallation interrompt vos services. Effectuez cette opération pendant les heures creuses.

    Mise à niveau vers V4 si les exigences de version sont satisfaites

    Démontez le système de fichiers OSS monté. Remplacez <mountpoint> par votre répertoire réel.

    sudo umount <mountpoint>

    Après le démontage, suivez l'exemple de commande pour effectuer la mise à niveau.

    Mise à niveau vers V4 si les exigences de version ne sont pas satisfaites

    1. Démontez le système de fichiers OSS monté. Remplacez <mountpoint> par votre répertoire réel.

      sudo umount <mountpoint>
    2. Désinstallez l'ancienne version.

      Si vous avez installé ossfs à l'aide d'un gestionnaire de packages, tel que apt ou yum, exécutez la commande suivante :

      sudo apt remove ossfs  # For Ubuntu/Debian systems
      sudo yum remove ossfs  # For CentOS/Anolis/Alibaba Cloud Linux systems

      Si vous avez compilé et installé ossfs à partir du code source, accédez au répertoire d'installation et exécutez la commande suivante :

      sudo make uninstall
    3. Téléchargez et installez la nouvelle version.

    Après avoir installé la nouvelle version, suivez l'exemple de commande pour effectuer la mise à niveau.

  2. Par rapport à la signature V1, lorsque vous utilisez la signature V4, vous devez effectuer les actions suivantes dans la commande de montage :

  • Définissez l'option sigv4.

  • Définissez l'option region sur l'ID de région du bucket.

Exemple de commande

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

API (construction manuelle de la signature)

Utilisez un SDK OSS pour envoyer des requêtes, car le SDK calcule automatiquement la signature. Si vous ne pouvez pas utiliser de SDK OSS, vous devez construire manuellement une signature V4 et vous assurer que la requête est correcte.

Méthode de signature

Description

Références

Inclusion de la signature dans l'en-tête

Dans OSS, la méthode la plus courante pour la vérification d'identité consiste à inclure la signature dans l'en-tête Authorization d'une requête HTTP. Toutes les opérations OSS, à l'exception de celles qui utilisent des signatures POST ou des signatures URL, nécessitent une authentification via l'en-tête Authorization.

Inclusion d'une signature V4 dans l'en-tête

Inclusion de la signature dans l'URL

Vous pouvez accorder un accès tiers à vos ressources OSS pour une période de validité spécifique sans révéler vos identifiants d'accès en générant une URL signée qui inclut la signature et les autres informations de requête nécessaires.

Inclusion d'une signature V4 dans l'URL

Signature de requête POST

La signature PostObject est un mécanisme qui vous permet de télécharger des fichiers directement vers OSS via un formulaire HTML. Ce mécanisme permet aux utilisateurs de construire un formulaire HTML sur un client, tel qu'un navigateur web. Le formulaire comprend des champs pour le fichier à télécharger et d'autres paramètres nécessaires, tels que la signature, la paire AccessKey, le nom du bucket et la clé de l'objet. Lorsque le formulaire est soumis, ces informations sont envoyées à OSS via une requête HTTP POST, et OSS vérifie la validité de la requête POST.

Signature V4 pour les requêtes POST

Calendrier de dépréciation et impact de la signature V1

Conformément à l'annonce d'arrêt de la version 1 de la signature du service Object Storage Service d'Alibaba Cloud, la signature V1 pour le service Object Storage Service d'Alibaba Cloud sera progressivement abandonnée pour les nouveaux clients (nouveaux UID) à partir du 1er mars 2025. À compter du 1er septembre 2025, la signature V1 ne sera plus mise à jour ni maintenue et ne sera pas disponible pour les nouveaux buckets.

Comparaison entre la signature V1 et la signature V4

Élément

Signature V1

Signature V4

Algorithme de signature

HMAC-SHA1

HMAC-SHA256

Période de validité de l'URL signée

L'heure de signature peut remonter à plus de 7 jours dans le passé. La période de validité peut dépasser 7 jours.

L'heure de signature est limitée aux 7 derniers jours. La période de validité est limitée à 7 jours.

Construction de la chaîne de signature

La chaîne de signature inclut la méthode HTTP, Content-MD5, Content-Type, la date, les en-têtes normalisés et le chemin d'accès à la ressource.

La chaîne de signature possède une structure plus complexe, qui comprend la méthode de requête, l'URI normalisé, les paramètres de requête normalisés, les en-têtes normalisés, les en-têtes signés supplémentaires et le hachage de la charge utile.

En-têtes et paramètres de requête normalisés

Seuls les en-têtes préfixés par x-oss- sont normalisés. Seuls certains paramètres de requête sont inclus dans la signature.

Tous les en-têtes préfixés par x-oss- et les en-têtes signés par défaut (tels que content-type et content-md5) sont normalisés. Les en-têtes signés supplémentaires sont également pris en charge.

Encodage du chemin d'accès à la ressource

La barre oblique (/) dans le chemin d'accès à la ressource est encodée.

Le / dans les chemins d'accès aux ressources n'est pas échappé, tandis que le / dans les paramètres de requête doit être échappé sous la forme %2F.

Format de l'horodatage et de la date

Utilise le format de date HTTP standard, par exemple, Wed, 21 Oct 2015 07:28:00 GMT.

Utilise le format ISO 8601 pour l'heure UTC, par exemple, 20151021T072800Z.

Informations sur la région

La signature n'inclut pas d'informations sur la région.

Les règles de signature introduisent le concept de région. La chaîne de signature et la clé de signature doivent toutes deux inclure l'ID de la région.

FAQ

Comment vérifier rapidement si j'utilise la signature V1 ou la signature V4 ?

Utilisez la requête de journal en temps réel ou un outil de capture de paquets, tel que Wireshark ou Fiddler, pour consulter le champ Authorization dans l'en-tête de la requête HTTP envoyée à OSS.

  • Signature V1 : Le champ Authorization commence par OSS et présente le format suivant :

    Authorization: OSS <AccessKeyId>:<Signature>
  • Signature V4 : Le champ Authorization commence par OSS4-HMAC-SHA256 et présente le format suivant :

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

Comment résoudre une erreur SignatureDoesNotMatch

Si le calcul de la signature est incorrect, le système renvoie le code d'erreur SignatureDoesNotMatch . Pour localiser rapidement le problème, comparez les informations relatives à la signature générées par le serveur et par le client. La réponse renvoyée par le serveur contient les informations clés suivantes :

  • CanonicalRequest : la chaîne de requête normalisée générée par le serveur.

  • StringToSign : la chaîne à signer générée par le serveur sur la base de la requête normalisée.

  • Signature : la valeur finale de la signature calculée par le serveur.

En comparant ces champs avec les champs correspondants générés par le client, vous pouvez rapidement identifier les différences et localiser la source de l'erreur. Par exemple :

  • Si CanonicalRequest est incohérent, l'ordre de concaténation ou le format des paramètres de requête peut être incorrect.

  • Si StringToSign est incohérent, la date, la région ou les informations sur le produit cloud peuvent être définies incorrectement.

  • Si Signature est incohérente, il peut y avoir un problème avec le calcul de la clé dérivée ou l'implémentation de l'algorithme de signature.