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 | ||
Python V2 | |||
Python V1 | |||
Go V2 | |||
Go V1 | |||
PHP V2 | |||
PHP V1 | |||
C# V2 | |||
C# V1 | |||
JavaScript | |||
C++ | |||
C | |||
Swift | |||
Objective-C | |||
Android | |||
ossutil | ossutil 2,0 | ||
ossutil 1,0 | |||
ossfs | ossfs 2,0 | ||
ossfs 1,0 | |||
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
Mettez à jour le SDK OSS pour Java vers la version 3.17.4 ou une version ultérieure.
-
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
Toutes les versions du SDK OSS pour Python V2 prennent en charge la signature V4 par défaut.
-
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
Mettez à jour le SDK OSS pour Python V1 vers la version 2.18.4 ou une version ultérieure.
-
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
Toutes les versions du SDK OSS pour Go V2 prennent en charge la signature V4 par défaut.
-
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
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.
Mettez à jour le SDK OSS pour Go V1 vers la version 3.0.2 ou une version ultérieure.
-
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
Toutes les versions du SDK OSS pour PHP V2 prennent en charge la signature V4 par défaut.
-
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
Mettez à jour le SDK OSS pour PHP V1 vers la version 2.7.0 ou une version ultérieure.
-
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
Toutes les versions du SDK OSS pour C# V2 prennent en charge la signature V4 par défaut.
-
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
Mettez à jour le SDK OSS pour C# V1 vers la version 2.14.0 ou une version ultérieure.
-
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
Mettez à jour le SDK OSS pour Node.js vers la version 6.20.0 ou ultérieure.
-
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
Mettez à jour le SDK OSS pour Browser.js vers la version 6.20.0 ou ultérieure.
-
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++
Mettez à jour le SDK OSS pour C++ vers la version 1.10.0 ou ultérieure.
-
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
Mettez à jour le SDK OSS pour C vers la version 3.11.0 ou ultérieure.
-
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
Toutes les versions du SDK OSS pour Swift prennent en charge la signature V4 par défaut.
-
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
Mettez à jour le SDK OSS pour iOS vers la version 2.11.1 ou ultérieure.
-
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
Mettez à jour le SDK OSS pour Android vers la version 2.3 ou ultérieure.
-
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
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-versionsurv4.Définissez l'option
--regionsur 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.
-
Avant la mise à niveau, exécutez la commande
ossfs --versionpour vérifier la version actuelle et remplissez les prérequis suivants en fonction de votre version.ImportantLa 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.
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
oss_regionsur l'ID de région du bucket.
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.
-
Avant la mise à niveau, exécutez la commande
ossfs --versionpour vérifier la version actuelle et remplissez les prérequis suivants en fonction de votre version.ImportantLa 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
-
Démontez le système de fichiers OSS monté. Remplacez
<mountpoint>par votre répertoire réel.sudo umount <mountpoint> -
Désinstallez l'ancienne version.
Si vous avez installé ossfs à l'aide d'un gestionnaire de packages, tel que
aptouyum, exécutez la commande suivante :sudo apt remove ossfs # For Ubuntu/Debian systems sudo yum remove ossfs # For CentOS/Anolis/Alibaba Cloud Linux systemsSi 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
Après avoir installé la nouvelle version, suivez l'exemple de commande pour effectuer la mise à niveau.
-
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
regionsur 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 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. |
|
|
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. |
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 |
||
|
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 |
Tous les en-têtes préfixés par |
|
Encodage du chemin d'accès à la ressource |
La barre oblique (/) dans le chemin d'accès à la ressource est encodée. |
Le |
|
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
Authorizationcommence parOSSet présente le format suivant :Authorization: OSS <AccessKeyId>:<Signature> -
Signature V4 : Le champ
Authorizationcommence parOSS4-HMAC-SHA256et 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
CanonicalRequestest incohérent, l'ordre de concaténation ou le format des paramètres de requête peut être incorrect.Si
StringToSignest incohérent, la date, la région ou les informations sur le produit cloud peuvent être définies incorrectement.Si
Signatureest 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.