赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 对象存储
  4. 开发参考
  5. OSS签名机制指南
  6. V1签名升级为V4签名

V1签名升级为V4签名

  • OSS签名机制指南
  • 发布于 2025-04-21
  • 0 次阅读
文档编辑
文档编辑

OSS 将逐步下线 V1 签名,请尽快升级至更安全的 V4 签名,以确保应用稳定运行。

如何从V1签名升级为V4签名

根据当前使用方式,参考对应的指引完成升级。

工具

类型

支持V4的版本

升级指引

OSS SDK

Java

3.17.4及以上版本

OSS SDK

PHP

2.7.0及以上版本

JavaScript

6.20.0及以上版本

Python V2

所有版本

Python V1

2.18.4及以上版本

.NET

2.14.0及以上版本

Go V2

所有版本

Go V1

3.0.2及以上版本

C++

1.10.0及以上版本

C

3.11.0及以上版本

iOS

2.11.1及以上版本

Android

2.3及以上版本

ossutil

ossutil2.0

所有版本

ossutil

ossutil1.0

1.7.12及以上版本

ossbrowser

ossbrowser2.0

所有版本

ossbrowser

ossbrowser1.0

所有版本不支持

ossfs

ossfs2.0

所有版本

ossfs

ossfs1.0

1.91.4及以上版本

API(手动构造签名)

如何将手动构造的V1签名算法升级为V4,参见API(手动构造签名)

OSS控制台

OSS自动升级,用户无感

OSS SDK

Java

  1. 升级OSS Java SDK为3.17.4及以上版本。

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

    • 指定Bucket所在地域的地域ID作为发起请求地域的标识,以华东1(杭州)为例,地域ID为cn-hangzhou。

    • 显式声明使用 V4 签名算法,示例值:SignVersion.V4。

代码示例

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

public class OSSClientV4 {

    public static void main(String[] args) throws Exception {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 填写Endpoint对应的Region信息,例如cn-hangzhou。
        String region = "cn-hangzhou";

        // 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

        // 创建OSSClient实例。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // 显式声明使用 V4 签名算法
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        // 关闭OSSClient。
        ossClient.shutdown();
    }
}

PHP

  1. 升级OSS PHP SDK为2.7.0及以上版本。

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

    • 指定Bucket所在地域的地域ID作为发起请求地域的标识,以华东1(杭州)为例,地域ID为cn-hangzhou。

    • 显式声明使用 V4 签名算法,示例值:OSS_SIGNATURE_VERSION_V4。

代码示例

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

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

try {
    // 从环境变量中获取访问凭证,并保存在provider中。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    $provider = new EnvironmentVariableCredentialsProvider();
    // 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";    
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,        
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        // 填写Endpoint对应的Region信息,例如cn-hangzhou。
        "region" => "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
} catch (OssException $e) {
    printf($e->getMessage() . "\n");
    return;
}

Node.js

  1. 升级OSS Node.js SDK为6.20.0及以上版本。

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

    • 指定Bucket所在地域的OSS专用地域ID作为发起请求地域的标识,以华东1(杭州)为例,Region ID为oss-cn-hangzhou。

    • 显式声明使用 V4 签名算法,示例值:authorizationV4。

代码示例

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

const client = new OSS({
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourRegion',
  authorizationV4: true,
  // yourBucketName填写Bucket名称。
  bucket: 'yourBucketName',
});

Python

Python V2

  1. OSS Python V2所有版本默认支持V4签名。

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

    指定Bucket所在地域的地域ID作为发起请求地域的标识,以华东1(杭州)为例,Region ID为cn-hangzhou。

代码示例

import alibabacloud_oss_v2 as oss

def main():
    # 从环境变量中加载凭证信息,用于身份验证
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 加载SDK的默认配置,并设置凭证提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 方式一: 只填写Region即可
    # 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
    cfg.region = 'cn-hangzhou'

    # # 方式二: 直接填写Region和Endpoint
    # # 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
    # cfg.region = 'cn-hangzhou'
    # # 填写Bucket所在地域对应的公网Endpoint。以华东1(杭州)为例,Endpoint填写为'https://oss-cn-hangzhou.aliyuncs.com',
    # # 如需指定为http协议,请在指定域名时填写为'http://oss-cn-hangzhou.aliyuncs.com'
    # cfg.endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

    # 使用配置好的信息创建OSS客户端
    client = oss.Client(cfg)

    # 使用创建好的client执行后续操作...

# 当此脚本被直接运行时,调用main函数
if __name__ == "__main__":
    main()  # 脚本入口,当文件被直接运行时调用main函数

Python V1

  1. 升级OSS Python SDK为2.18.4及以上版本。

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

    • 指定Bucket所在地域的地域ID作为发起请求地域的标识,以华东1(杭州)为例,地域ID为cn-hangzhou。

    • 显式声明使用 V4 签名算法,示例值:oss2.ProviderAuthV4。

代码示例

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

# 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = 'yourEndpoint'
# 填写Endpoint对应的Region信息,例如cn-hangzhou。
region = 'cn-hangzhou'

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

Browser.js

  1. 升级OSS Browser.js SDK为6.20.0及以上版本。

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

    • 指定Bucket所在地域的OSS专用地域ID作为发起请求地域的标识,以华东1(杭州)为例,Region ID为oss-cn-hangzhou。

    • 显式声明使用 V4 签名算法,示例值:authorizationV4。

代码示例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <!--导入SDK文件-->
    <script
      type="text/javascript"
      src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.20.0.min.js"
    ></script>
    <script type="text/javascript">
      const client = new OSS({
        // yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。
        region: 'yourRegion',
	authorizationV4: true,
        // 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
        accessKeyId: 'yourAccessKeyId',
        accessKeySecret: 'yourAccessKeySecret',
        // 从STS服务获取的安全令牌(SecurityToken)。
        stsToken: 'yourSecurityToken',
        // 填写Bucket名称,例如examplebucket。
        bucket: "examplebucket",
      });
    </script>
  </body>
</html>

.NET

  1. 升级OSS .NET SDK为2.14.0及以上版本。

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

    • 指定Bucket所在地域的地域ID作为发起请求地域的标识,以华东1(杭州)为例,Region ID为cn-hangzhou。

    • 显式声明使用 V4 签名算法,示例值:SignVersion.V4。

代码示例

using Aliyun.OSS;
using Aliyun.OSS.Common;
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");、

//  填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
const string endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

// 填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。
const string region = "cn-hangzhou";

// 创建ClientConfiguration实例,按照您的需要修改默认参数。
var conf = new ClientConfiguration();

// 设置v4签名。
conf.SignatureVersion = SignatureVersion.V4;

// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);

Go

Go V2

  1. OSS Go V2所有版本默认支持V4签名。

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

    指定Bucket所在地域的地域ID作为发起请求地域的标识,以华东1(杭州)为例,Region ID为cn-hangzhou。

代码示例

package main

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

func main() {
	// 方式一:只填写Region即可
	// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-hangzhou")

	// 方式二:直接填写Region和Endpoint
	// 填写Bucket所在地域,以华东1(杭州)为例,Region填写为cn-hangzhou
	// 填写Bucket所在地域对应的公网Endpoint,以华东1(杭州)为例,Endpoint填写为'https://oss-cn-hangzhou.aliyuncs.com'。如需指定为http协议,请在指定域名时填写为'http://oss-cn-hangzhou.aliyuncs.com'
	// cfg := oss.LoadDefaultConfig().
	//     WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	//     WithRegion("cn-hangzhou").
	//     WithEndpoint("https://oss-cn-hangzhou.aliyuncs.com")

	// 创建OSS客户端
	client := oss.NewClient(cfg)

	// 使用client执行后续操作...
}

Go V1

说明

Go V2所有版本默认支持V4签名,建议将Go SDK V1迁移到Go SDK V2。

  1. 升级OSS GO V1 SDK为3.0.2及以上版本。

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

    • 指定Bucket所在地域的地域ID作为发起请求地域的标识,以华东1(杭州)为例,Region ID为cn-hangzhou。

    • 显式声明使用 V4 签名算法,示例值:oss.AuthV4。

代码示例

package main

import (
	"log"

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

// handleError 用于处理不可恢复的错误,并记录错误信息后终止程序。
func handleError(err error) {
	log.Fatalf("Error: %v", err)
}

// setupClient 用于设置并创建OSS客户端实例。
// 参数:
//
//	endpoint - Bucket对应的Endpoint。
//	region - Endpoint对应的Region信息。
//
// 返回创建的OSS客户端实例。
func setupClient(endpoint, region string) (*oss.Client, error) {
	// 从环境变量中获取访问凭证。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		return nil, err
	}

	// 创建OSSClient实例,并使用V4签名。
	client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region(region))
	if err != nil {
		return nil, err
	}

	return client, nil
}

func main() {
	// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	endpoint := "yourEndpoint"

	// yourRegion填写Endpoint对应的Region信息,例如cn-hangzhou。
	region := "yourRegion"

	// 检查环境变量是否已经设置。
	if endpoint == "" || region == "" {
		log.Fatal("Please set yourEndpoint and yourRegion.")
	}

	// 设置并创建OSS客户端实例。
	client, err := setupClient(endpoint, region)
	if err != nil {
		handleError(err)
	}

	// 输出客户端信息。
	log.Printf("Client: %#v\n", client)
}

C++

  1. 升级OSS C++ SDK为1.10.0及以上版本。

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

    • 指定Bucket所在地域的地域ID作为发起请求地域的标识,以华东1(杭州)为例,Region ID为cn-hangzhou。

    • 显式声明使用 V4 签名算法,示例值:SignatureVersionType::V4。

代码示例

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

int main(void)
{
    /* 初始化OSS账号信息。*/
            
    /* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "yourEndpoint";
    /* yourRegion填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。*/
    std::string Region = "yourRegion";
    
    /* 初始化网络等资源。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* 释放网络等资源。*/
    ShutdownSdk();
    return 0;
}

C

  1. 升级OSS C SDK为3.11.0及以上版本。

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

    • 指定Bucket所在地域的地域ID作为发起请求地域的标识,以华东1(杭州)为例,Region ID为cn-hangzhou。

    • 显式声明使用 V4 签名算法,示例值:signature_version = 4。

代码示例

#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
const char *endpoint = "yourEndpoint";
/* yourRegion填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。*/
const char *region = "yourRegion";

void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* 用char*类型的字符串初始化aos_string_t类型。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/  
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    //需要额外配置以下两个参数
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* 是否使用CNAME访问OSS服务。0表示不使用。*/
    options->config->is_cname = 0;
    /* 用于设置网络相关参数,其中这个函数的第二个参数表示ctl的归属,默认为0。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main() {
    aos_pool_t *p;
    oss_request_options_t *options;
    /* 初始化全局变量,在程序生命周期内只需要调用一次。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        return -1;
    }
    /* 初始化内存池和options。*/
    aos_pool_create(&p, NULL);
    options = oss_request_options_create(p);
    init_options(options);
    /* 逻辑代码,此处省略。*/
    /* 释放内存池,相当于释放了请求过程中各资源分配的内存。*/
    aos_pool_destroy(p);
    /* 释放之前分配的全局资源,在程序生命周期内只需要调用一次。*/
    aos_http_io_deinitialize();
    return 0;
}

iOS

  1. 升级OSS iOS SDK为2.11.1及以上版本。

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

    • 指定Bucket所在地域的地域ID作为发起请求地域的标识,以华东1(杭州)为例,Region ID为cn-hangzhou。

    • 显式声明使用 V4 签名算法,示例值:OSSSignVersionV4。

代码示例

// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
NSString *endpoint = @"yourEndpoint";
// 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// 从STS服务获取的安全令牌(SecurityToken)。
NSString *securityToken = @"yourSecurityToken";
NSString *region = @"yourRegion";

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

Android

  1. 升级OSS Android SDK为2.3及以上版本。

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

    • 指定Bucket所在地域的地域ID作为发起请求地域的标识,以华东1(杭州)为例,Region ID为cn-hangzhou。

    • 显式声明使用 V4 签名算法,示例值:SignVersion.V4。

代码示例

// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 从STS服务获取的安全令牌(SecurityToken)。
String securityToken = "yourSecurityToken";
// yourEndpoint填写Bucket所在地域。以华东1(杭州)为例,region填写为cn-hangzhou。
String region = "yourRegion";

OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// 创建OSSClient实例。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);

ossutil

ossutil2.0

命令行工具ossutil 2.0所有版本默认支持V4签名。

相比V1签名,使用V4签名时,您需要在配置ossutil时,使用Bucket所在地域的地域ID设置Region。

示例命令

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

ossutil1.0

说明

ossutil2.0所有版本默认支持V4签名,建议ossutil 1.0迁移至ossutil2.0

命令行工具ossutil 1.0的1.7.12及以上版本支持V4签名。

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

  • 使用v4设置签名版本--sign-version。

  • 使用Bucket所在地域的地域ID设置--region。

示例命令

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

ossbrowser

ossbrowser2.0

图形化管理工具ossbrowser 2.0(预览版)所有版本默认支持V4签名。

ossbrowser1.0

图形化管理工具ossbrowser 1.0所有版本不支持V4签名,您需要使用图形化管理工具ossbrowser 2.0(预览版)。

ossfs

ossfs2.0

ossfs 2.0(预览版)所有版本都支持V4签名,默认V1版本。

  1. 升级之前,执行ossfs --version命令查看当前版本,并根据实际版本要求完成以下前置操作。

    重要

    涉及卸载操作将会中断业务,建议您选择在业务低谷期进行此操作。

    卸载已挂载的OSS文件系统。<mountpoint>替换为实际目录。

    sudo umount <mountpoint>

    卸载后,请按照示例命令进行升级。

  2. 相比V1签名,使用V4签名时,您需要在挂载命令中:

  • 使用Bucket所在地域的地域ID设置oss_region选项。

示例命令

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

ossfs1.0

ossfs 1.0的1.91.4及以上版本支持V4签名。

  1. 升级之前,执行ossfs --version命令查看当前版本,并根据实际版本要求完成以下前置操作。

    重要

    涉及卸载操作将会中断业务,建议您选择在业务低谷期进行此操作。

    符合版本要求升级V4

    卸载已挂载的OSS文件系统。<mountpoint>替换为实际目录。

    sudo umount <mountpoint>

    卸载后,请按照示例命令进行升级。

    不符合版本要求升级V4

    1. 卸载已挂载的OSS文件系统。<mountpoint>替换为实际目录。

      sudo umount <mountpoint>
    2. 卸载旧版本。

      如果是通过包管理工具(如 apt、yum等)安装的,请执行以下操作:

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

      如果是从源代码编译安装的,进入到安装目录并执行以下操作:

      sudo make uninstall
    3. 下载安装新版本。

    安装新版本后,请按照示例命令进行升级。

  2. 相比V1签名,使用V4签名时,您需要在挂载命令中:

  • 设置sigv4选项。

  • 使用Bucket所在地域的地域ID设置region选项。

示例命令

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

API(手动构造签名)

建议您优先使用 OSS SDK 发起请求,SDK 会自动计算签名。如无法使用 OSS SDK,需手动构造 V4 签名并确保请求正确。

签名方式

说明

参考文档

在Header中包含签名

在OSS中,使用HTTP请求的Authorization Header来携带签名信息是进行身份验证的最常见方法。除了使用POST签名和URL签名之外,所有的OSS操作都需要通过Authorization Header来进行身份验证。

在Header中包含V4签名

在URL中包含签名

通过生成一个包含签名和其他必要请求信息的预签名URL的方式,在不透露访问凭证的情况下,授予第三方在特定有效期内对OSS资源的访问权限。

在URL中包含V4签名

POST请求签名

PostObject签名旨在实现通过HTML表单直接上传文件到OSS的一种签名机制。这种机制允许用户在客户端(例如Web浏览器)构造一个HTML表单,表单中包含要上传文件的字段以及其他必要的参数,例如签名、访问密钥、Bucket名称、对象键等。当表单提交时,这些信息会通过HTTP POST请求发送到OSS,OSS会对POST请求进行合法性验证。

POST请求V4签名

V1签名下线时间和影响

公告

生效时间

变更说明

受影响的对象

应对措施

阿里云对象存储签名版本 V1 下线公告

2025年3月1日00:00:00

新开通 OSS的用户(阿里云账号UID)将无法使用 V1 签名发起请求

2025年3月1日00:00:00之后开通 OSS 的用户

如何从V1签名升级为V4签名

2025年9月1日00:00:00

新增的 Bucket 不再支持使用 V1 签名发起的请求

所有用户在2025年9月1日00:00:00之后创建的 Bucket

2025年9月1日00:00:00

逐步停止更新与维护V1签名

所有用户

V1签名和V4签名对比

项目

V1签名

V4签名

签名算法

HMAC-SHA1

HMAC-SHA256

预签名URL有效期

签名时间可以超过 7天。有效期可以超过7天。

签名时间限制为7天内。有效期限制7天内。

签名字符串的构建

构建的签名字符串包含 HTTP 方法、Content-MD5、Content-Type、日期、规范化的头部和资源路径。

构建的签名字符串包含更复杂的结构,包括请求方法、规范化的 URI、规范化的查询参数、规范化的头部、附加的签名头部和负载哈希。

规范化头部和查询参数

只规范化以 x-oss-开头的头部,只有部分查询参数参与签名。

规范化所有以 x-oss-开头的头部以及默认签名头部(如content-type和content-md5),并且支持附加的签名头部。

资源路径编码

对资源路径中的正斜线(/)进行编码。

资源路径中的/不做转义,而查询参数中的/需要转义为%2F。

时间戳和日期格式

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

使用ISO8601格式的UTC时间(例如:20151021T072800Z)

地域信息

签名中不包含区域信息

签名规则引入了区域的概念,签名字符串和签名密钥都需要包含RegionId。

常见问题

存量的Bucket是否可以继续使用V1签名?

  • 2025年3月1日00:00:00~2025年9月1日00:00:00,2025年3月1日00:00:00之前开通OSS的用户的Bucket可以继续使用V1签名。

  • 2025年9月1日00:00:00之后,2025年3月1日00:00:00之前开通OSS的用户在2025年9月1日00:00:00之前创建的 Bucket 可以继续使用V1签名。

如何快速确认我现在使用的是OSS V1签名还是V4签名?

通过实时日志查询或抓包工具(如Wireshark、Fiddler),查看发送到OSS的HTTP请求头中的Authorization字段。

  • V1签名:Authorization字段以OSS开头,格式如下:

    Authorization: OSS <AccessKeyId>:<Signature>
  • V4签名:Authorization字段以OSS4-HMAC-SHA256开头,格式如下:

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

SignatureDoesNotMatch如何快速检查

如果签名计算错误,系统会返回错误码 SignatureDoesNotMatch。此时,可以通过对比服务端和客户端生成的签名相关信息快速定位问题。服务端在返回的响应(Response)中会包含以下关键信息:

  • CanonicalRequest:服务端生成的规范化请求字符串。

  • StringToSign:服务端基于规范化请求生成的待签名字符串。

  • Signature:服务端最终计算出的签名值。

将这些字段与客户端生成的对应字段进行逐一比对,可以快速识别差异并定位错误来源。例如:

  • 如果 CanonicalRequest 不一致,可能是请求参数拼接顺序或格式有误。

  • 如果 StringToSign 不一致,可能是日期、地域或云产品信息设置错误。

  • 如果 Signature 不一致,可能是派生密钥计算或签名算法实现存在问题。

相关文章

使用REST API发起请求 2025-04-21 17:16

您可以直接发起REST API请求。使用REST API发起请求适用于对程序自定义要求较高的场景。您需要手动编写代码计算签名并将签名添加到REST API请求中。OSS仅支持虚拟托管(Virtual Hosted)风格的REST API请求。

V1签名升级为V4签名 2025-04-21 17:16

OSS 将逐步下线 V1 签名,请尽快升级至更安全的 V4 签名,以确保应用稳定运行。 如何从V1签名升级为V4签名 根据当前使用方式,参考对应的指引完成升级。

签名错误问题排查 2025-04-21 17:16

本文主要介绍OSS签名错误的常见场景以及排查方法。 签名错误报错信息

签名版本4(推荐) 2025-04-21 17:16

向 OSS 发起请求时,添加包含 V4 签名的 Authorization 请求头(Header),以确保请求能够通过身份验证。优先使用 OSS 提供的 SDK 发起请求,因为 SDK 已集成复杂的 V4 签名算法。只有在无法使用 SDK 时,才需要参考本文自行实现 V4 签名算法。 SDK 签名实

签名版本1 2025-04-21 17:16

在OSS中,使用HTTP请求的Authorization Header来携带签名信息是进行身份验证的最常见方法。除了使用POST签名和URL签名之外,所有的OSS操作都需要通过Authorization Header来进行身份验证。本文介绍如何使用V1签名算法来在Header中包含签名。

签名版本4(推荐) 2025-04-21 17:16

除了通过HTTP请求头部的Authorization字段进行签名授权外,您还可以生成一个包含签名和其他必要请求信息的预签名URL。通过这种方式,您可以在不透露访问凭证的情况下,授予第三方在特定有效期内对OSS资源的访问权限。本文介绍如何使用V4签名算法实现在URL中包含签名。 SDK签名实现 OSS

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号