活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心
      文档中心

      对象存储(经典版)I型

      对象存储(经典版)I型

        • 产品动态
        • 产品简介
        • 产品定义
        • 产品优势
        • 功能特性
        • 应用场景
        • 主要概念
        • 存储桶和文件
        • Account、Service、Bucket和Object
        • 存储类型
        • 合规保留
        • 清单配置
        • 统计分析
        • 操作跟踪
        • 访问控制
        • 数据安全
        • 使用限制
        • 与其他服务的关系
        • 计费说明
        • 计费模式
        • 计费项
        • 按需计费
        • 资源包计费
        • 到期
        • 欠费
        • 快速入门
        • 相关术语解释
        • 服务开通
        • 订购须知
        • 开通OOS服务
        • 资源包订购
        • 资源包续订
        • 资源包退订
        • 控制台快速入门
        • 进入控制台
        • 地域切换
        • 创建存储桶
        • 上传文件
        • 下载文件
        • 控制台指南
        • 进入控制台
        • 域名(Endpoint)
        • 域名(Endpoint)列表
        • 地域切换
        • IAM用户操作权限要求
        • 统计概览
        • 统计概述
        • 概览
        • 统计
        • 容量
        • 删除量
        • 流量
        • 请求次数
        • 并发连接数
        • 数据取回
        • 存储桶管理
        • 存储桶(Bucket)概述
        • 创建存储桶(Bucket)
        • 存储桶列表
        • 删除存储桶(Bucket)
        • 清空存储桶
        • 查看/修改存储桶属性
        • 区域属性
        • 安全策略
        • 网站
        • 日志
        • 生命周期
        • 跨域设置
        • 合规保留
        • 清单配置
        • 文件管理
        • 文件概述
        • 文件列表
        • 查看文件详细信息
        • 上传文件
        • 下载文件
        • 管理文件元数据
        • 预览文件
        • 分享文件
        • 创建文件夹
        • 删除文件或文件夹
        • 复制文件
        • 移动文件
        • 修改存储类型
        • 搜索文件或文件夹
        • 复制文件名称
        • 文件排序
        • 操作跟踪
        • 操作跟踪概述
        • 管理事件记录
        • 跟踪列表
        • 访问控制
        • 访问控制概述
        • 快速入门
        • IAM用户
        • 创建IAM用户
        • 查看和修改IAM用户信息
        • 删除用户
        • IAM子用户登录
        • IAM用户组
        • 创建用户组
        • 查看和修改用户组信息
        • 删除用户组
        • IAM策略
        • 概述
        • IAM策略编写规则
        • Version
        • Statement
        • 系统策略
        • 自定义策略
        • 新建自定义策略
        • 修改自定义策略
        • 删除自定义策略
        • 查看策略基本信息
        • 授权用户/用户组
        • 安全设置
        • 密码安全设置
        • 登录安全设置
        • 安全凭证
        • 密钥
        • 密码
        • MFA
        • 资源包管理
        • API参考
        • 安全策略
        • 用户签名验证(V2)
        • Header中包含签名
        • 使用查询参数验证
        • 用户签名验证(V4)
        • Signature Version 4的工作原理
        • 认证方法
        • 使用Authorization请求头验证
        • 使用查询参数验证
        • Bucket权限控制
        • 访问控制
        • Bucket Policy安全策略
        • 介绍
        • Bucket Policy元素
        • 示例
        • 合规保留
        • 存储桶(Bucket)和文件(Object)
        • OOS API请求结构
        • 关于Service的操作
        • Get Service (List Buckets)
        • Get Regions
        • 关于Bucket的操作
        • PUT Bucket
        • Get Bucket Location
        • GET Bucket ACL
        • GET Bucket (List Objects)
        • DELETE Bucket
        • PUT Bucket Policy
        • GET Bucket Policy
        • DELETE Bucket Policy
        • PUT Bucket Website
        • GET Bucket Website
        • DELETE Bucket Website
        • List Multipart Uploads
        • PUT Bucket Logging
        • GET Bucket Logging
        • HEAD Bucket
        • PUT Bucket Lifecycle
        • GET Bucket Lifecycle
        • DELETE Bucket Lifecycle
        • PUT Bucket CORS
        • GET Bucket CORS
        • DELETE Bucket CORS
        • PUT Bucket Object Lock
        • GET Bucket Object Lock
        • DELETE Bucket Object Lock
        • PUT Bucket Inventory Configuration
        • GET Bucket Inventory Configuration
        • List Bucket Inventory Configuration
        • DELETE Bucket Inventory Configuration
        • 关于Object的操作
        • PUT Object
        • GET Object
        • DELETE Object
        • PUT Object - Copy
        • Initial Multipart Upload
        • Upload Part
        • Complete Multipart Upload
        • Abort Multipart Upload
        • List Parts
        • Copy Part
        • Delete Multiple Objects
        • 断点续传
        • POST Object
        • OPTIONS Object
        • 生成共享链接
        • HEAD Object
        • Backoff说明
        • 错误响应
        • REST错误响应
        • 错误码列表
        • 统计分析
        • 统计API请求结构
        • 统计API概览
        • 统计API
        • GetCapacity
        • GetBilledStorageUsage
        • GetRestoreCapacity
        • GetDeleteCapacity
        • GetTraffics
        • GetRequests
        • GetReturnCode
        • GetConcurrentConnection
        • GetUsage
        • GetBandwidth
        • 错误码列表
        • 操作跟踪
        • 操作跟踪API请求结构
        • 操作跟踪API概览
        • 操作跟踪API
        • CreateTrail
        • DeleteTrail
        • DescribeTrails
        • GetTrailStatus
        • PutEventSelectors
        • GetEventSelectors
        • UpdateTrail
        • StartLogging
        • StopLogging
        • LookupEvents
        • 错误码列表
        • 操作跟踪记录事件列表
        • 访问控制(IAM)
        • IAM API请求结构
        • 访问控制API概览
        • 用户管理接口
        • CreateUser
        • GetUser
        • ListUsers
        • DeleteUser
        • TagUser
        • UntagUser
        • ListUserTags
        • ListGroupForUser
        • CreateAccessKey
        • ListAccessKeys
        • GetAccessKeyLastUsed
        • UpdateAccessKey
        • DeleteAccessKey
        • GetSessionToken
        • CreateLoginProfile
        • GetLoginProfile
        • UpdateLoginProfile
        • DeleteLoginProfile
        • ChangePassword
        • CreateVirtualMFADevice
        • EnableMFADevice
        • ListVirtualMFADevices
        • ListMFADevices
        • DeactivateMFADevice
        • DeleteVirtualMFADevice
        • 用户组管理接口
        • CreateGroup
        • GetGroup
        • AddUserToGroup
        • RemoveUserFromGroup
        • ListGroups
        • DeleteGroup
        • 权限策略管理接口
        • CreatePolicy
        • GetPolicy
        • ListPolicies
        • ListEntitiesForPolicy
        • DeletePolicy
        • AttachUserPolicy
        • ListAttachedUserPolicies
        • DetachUserPolicy
        • AttachGroupPolicy
        • ListAttachedGroupPolicies
        • DetachGroupPolicy
        • UpdateAccountPasswordPolicy
        • GetAccountPasswordPolicy
        • DeleteAccountPasswordPolicy
        • UpdateAccountLoginSecurityPolicy
        • GetAccountLoginSecurityPolicy
        • DeleteAccountLoginSecurityPolicy
        • 服务数量查询
        • 错误码列表
        • IAM策略编写规则
        • 操作权限与API对应关系
        • 常用工具
        • OOS数据迁移工具
        • 介绍
        • 运行环境
        • 迁移步骤
        • 迁移配置文件示例
        • 常见问题
        • 最佳实践
        • 生命周期管理存储桶文件
        • 分享文件
        • 降低恶意访问风险
        • 设置跨域访问
        • 使用S3 Java SDK访问OOS
        • IAM最佳实践
        • 安全管理
        • 用户管理
        • STS临时授权示例
        • 授予其他主账号及主账户下子账号操作名下存储桶的权限
        • 同地域实现内网访问OOS
        • 数据一致性校验
        • 性能优化
        • 使用HttpURLConnection开发
        • 使用V2签名时的HttpURLConnection开发
        • 使用V4签名时的HttpURLConnection开发
        • 数据迁移
        • 本地数据迁移到OOS
        • AWS S3数据迁移到OOS
        • 阿里云OSS数据迁移到OOS
        • OOS之间的数据迁移
        • 图片处理
        • 应用场景
        • 主要概念
        • 参数说明
        • URL构成规则
        • 规则说明
        • 用户签名
        • 接口
        • 图像处理接口
        • 图片水印接口
        • 管道
        • 图片拼接成GIF接口
        • 示例
        • 示例链接
        • 示例代码
        • 常见问题
        • 计费类
        • 计费类常见问题
        • 资源包是否必须购买?是否能指定给具体的存储桶使用?
        • 已购买资源包,为什么仍然扣费?
        • 存储桶内无文件,为什么会产生流量?
        • 哪些资源包会按月更新额度,哪些不会?
        • 如何关闭OOS服务或停止计费?
        • 存储容量和流出流量的关系?
        • 购买类
        • 产品咨询类
        • 产品咨询类常见问题
        • 什么是对象存储网络?
        • 可以上传什么样的文件,大小是否有限制?
        • 什么是存储桶的索引位置和数据位置?
        • 可以在OOS中存储多少数据?
        • OOS是否有图形化管理工具或者命令行工具,帮助用户上传数据到OOS?
        • OOS的持久性和可用性如何?
        • OOS有哪些数据访问方法?
        • 如何保障OOS用户数据的安全?
        • OOS与自建服务器存储对比?
        • 为什么通过OOS控制台访问OOS中的资源时被强制下载?
        • 存储桶(Bucket)和文件(Object)类
        • 存储桶(Bucket)和文件(Object)常见问题
        • 如何创建存储桶(Bucket)?
        • 应该如何使用Bucket?
        • 如何选择使用哪个地域的OOS?
        • 生命周期管理支持哪些场景?
        • 如何获取存储桶的静态网站托管地址?
        • 如何绑定自己的域名?
        • 可以对OOS Bucket进行重命名吗?是否支持Object迁移?
        • OOS支持Bucket作为域名的访问方式吗?
        • 图片上传到OOS,可否生成url,实现图片通过url直接访问预览?
        • 如何获取OOS文件的访问地址?
        • 怎么删除存储桶中的全部文件?
        • 统计分析类
        • 操作跟踪类
        • 访问控制类
        • 访问控制常见问题
        • 新版的IAM与旧版的IAM相比有什么区别?
        • 在绑定MFA页面,输入两组安全码后,提示安全码错误,怎么办?
        • API/SDK类
        • API/SDK常见问题
        • OOS兼容哪些Amazons S3 API?
        • 图片处理类
        • 工具类
        • 视频专区
        • 文档下载
        • OOS开发者文档
        • 用户手册
        • SDK及开发指南
        • 常用工具
        • 相关协议
        • 中国电信天翼云对象存储服务协议
        • 中国电信天翼云对象存储服务等级协议
          无相关产品

          本页目录

          帮助中心对象存储(经典版)I型API参考安全策略用户签名验证(V4)使用Authorization请求头验证
          使用Authorization请求头验证
          更新时间 2024-11-08 17:33:04
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          最近更新时间: 2024-11-08 17:33:04
          分享文章
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          本节主要介绍使用Authorization请求头验证的V4签名。

          概述

          Authorization请求头包含以下信息(增加换行是为了方便阅读,实际为空字符串):

          Authorization: AWS4-HMAC-SHA256 
          Credential=2a948fd3f00ba0925806/20180501/region/s3/aws4_request, 
          SignedHeaders=host;range;x-amz-date, 
          Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
          

          组成字段说明如下:

          字段描述

          AWS4-HMAC-SHA256

          用于签名的算法,固定值。
          Credential

          用户AccessKeyID和范围信息,范围信息包括请求日期、区域、服务、终止字符串aws4_request,格式如下:

          AccessKeyID/date/region/service/aws4_request

          其中:

          • date格式为YYYYMMDD。

          • region:
            对于oos api:访问域名为oos-xx.ctyunapi.cn,region为xx。

            对于统计api:访问域名为oos-xx-mg.ctyunapi.cn,region为xx-mg。

            对于操作跟踪api:访问域名为oos-xx-cloudtrail.ctyunapi.cn,region为xx。

            对于iam api:访问域名为oos-xx-iam.ctyunapi.cn,region为xx。
            各资源池的详细访问域名详见域名(Endpoint)列表。

          • service:
            若使用OOS API服务,service为s3。
            若使用统计分析服务,service为s3。
            若使用操作跟踪服务,service为cloudtrail。
            若使用IAM服务,service为sts。

          SignedHeaders

          已签名请求头的列表。该列表只需包含请求头名字,用分号分隔,必须全部小写,并按字符顺序对其进行排序,示例如下:

          host;range;x-amz-date。

          Signature计算出的256位签名信息,以64个小写十六进制字符串形式表示。

          有两种签名计算方式:

          • 签名负载方式 :用户可以选择计算整个负载(即请求体)的checksum,并将其包含在签名计算中。这种方式提高了安全性,但用户需要读取两次负载或将其缓冲在内存中。我们建议用户包含负载checksum以增强安全性。
          • 无签名负载方式 :在签名计算中不包括负载的checksum。将值设置为文本字符串UNSIGNED_PAYLOAD,直接作为签名计算。

          上述两种方式,都必须携带x-amz-content-sha256请求头,如果选择签名负载方式,请将x-amz-content-sha256请求头的值设置为负载的checksum值,否则将值设置为文本字符串UNSIGNED-PAYLOAD。

          签名过程

          签名过程如下图所示:

          image.png

          下表描述了图中显示的功能。用户需要为这些函数实现代码。

          功能描述
          Lowercase()将字符串转换为小写。
          Hex()小写16进制编码。
          SHA256Hash()安全散列算法(SHA)加密散列函数。
          HMAC-SHA256()使用签名密钥,根据SHA256算法计算出的签名值。
          Trim()删除任何前导或尾随空格。
          UriEncode()

          URI编码每个字节。UriEncode()必须强制执行以下规则:

          • 除下列字符外,其他字符进行URI编码:'A' - 'Z','a' - 'z','0' - '9',' - ','.','_'和'~'。

          • 空格字符是保留字符,必须编码为“%20”(而不是“+”)。

          • 每个URI编码字节由'%'和两位十六进制值组成。

          • 十六进制值中的字母必须为大写,例如“%1A”。

          • 除了文件名之外,对正斜杠字符'/'进行编码。例如,如果文件名称为 photos/Jan/sample.jpg,则不对名称中的正斜杠进行编码。

          说明

          建议用户编写自己的自定义UriEncode函数,以确保您的编码可以正常工作。

          以下是Java中的示例UriEncode()函数。

          public static String UriEncode(CharSequence input, boolean encodeSlash) {

                    StringBuilder result = new StringBuilder();

                    for (int i = 0; i < input.length(); i++) {

                        char ch = input.charAt(i);

                        if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '_' || ch == '-' || ch == '~' || ch == '.') {

                            result.append(ch);

                        } else if (ch == '/') {

                            result.append(encodeSlash ? "%2F" : ch);

                        } else {

                            result.append(toHexUTF8(ch));

                        }

                    }

                    return result.toString();

                }

          1. 创建规范请求

            将请求的内容(包括主机、操作、请求头等)组织为标准规范格式。规范请求是用于创建待签字符串的输入之一。伪代码如下:

            CanonicalRequest =
              HTTPRequestMethod + '\n' +
              CanonicalURI + '\n' +
              CanonicalQueryString + '\n' +
              CanonicalHeaders + '\n' +
              SignedHeaders + '\n' +
              HexEncode(Hash(RequestPayload))
            
            1. HTTPMethod是HTTP方法,例如GET,PUT,HEAD和DELETE。

            2. CanonicalURI是URI的绝对路径,以域名后面的“/”开头,直到字符串的末尾或者问号字符('?')截止。例如/examplebucket/myphoto.jpg。

            3. CanonicalQueryString是URI编码后的查询字符串参数。用户需要单独对参数名称和值进行URI编码。并需要按参数名称的字母顺序,对参数进行排序。排序在编码后进行。以下URI示例中的查询字符串是 prefix=somePrefix&marker=someMarker&max-keys=20:

              http://oos-cn.ctyunapi.cn/examplebucket?prefix=somePrefix&marker=someMarker&max-keys=20
              

              CanonicalQueryString的构造方式如下(为了便于阅读,添加了换行符):

              UriEncode("marker")+"="+UriEncode("someMarker")+"&"+
              UriEncode("max-keys")+"="+UriEncode("20") + "&" +
              UriEncode("prefix")+"="+UriEncode("somePrefix")
              

              当请求的目标是子资源时,相应的查询参数的值设置为空字符串(“”)。例如,下面的请求用于设置Bucket的ACL权限:

              http://oos-cn.ctyunapi.cn/examplebucket?acl
              

              在这种情况下,CanonicalQueryString为:

              UriEncode("acl") + "=" + ""
              

              如果URI中不包含“?”,则请求中不存在查询字符串,此时将CanonicalQueryString设置为空字符串(“”),但仍需要包含“\ n”。

            4. CanonicalHeaders是请求头的列表:
              各个请求头名称和值由换行符(“\ n”)分隔。请求头名称必须为小写。如果有相同名字的请求头,则根据标准RFC 2616, 4.2章进行合并(两个值之间只用英文逗号分隔)。如有两个名为'x-amz-meta-name'的请求头,对应的值分别为'fred'和'barney',则合并后为:'x-amz-meta-name:fred,barney'。删除分隔符(:)两端和值两端出现的任何空格。如'x-amz-meta-name : fred '转换成:'x-amz-meta-name:fred'。需要按字母顺序对请求头名称进行排序。
              示例如下:

              Lowercase(Trim(<HeaderName1>))+":"+Trim(<value>)+"\n"
              Lowercase(Trim(<HeaderName2>))+":"+Trim(<value>)+"\n"
              ...
              Lowercase(Trim(<HeaderNameN>))+":"+Trim(<value>)+"\n"
              

              CanonicalHeaders列表必须包括以下内容:HTTP Host标头。如果存在Content-Type请求头,则必须将其添加到CanonicalHeaders列表中。所有x-amz-*请求头,例如,如果您使用的是临时安全凭据,则需要在请求中包含x-amz-security-token,必须将此标题添加到CanonicalHeader列表中。

              以下是CanonicalHeaders的示例,请求头名称为小写并已排序。

              host:oos-cn.ctyunapi.cn
              x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
              x-amz-date:20130708T220855Z
              
            5. SignedHeaders是按字母顺序排序的,以分号分隔的小写请求头名称列表。列表中的请求头与用户在CanonicalHeaders字符串中包含的请求头相同。例如,对于前面的示例,SignedHeaders的值为:

              host;x-amz-content-sha256;x-amz-date
              
            6. RequestPayload是请求负载的SHA256哈希的十六进制值。
              如果请求中没有负载,则计算空字符串的哈希值,如下所示:

              Hex(SHA256Hash(""))
              

              哈希返回以下值:

              e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 
              

              例如:当用户使用PUT请求上传文件时,用户可以在请求体中提供文件数据。使用GET请求检索文件时,没有请求体,所以计算空字符串的哈希。

          2. 创建待签名字符串

            待签名的字符串格式如下:

            "AWS4-HMAC-SHA256" + "\n" +
            timeStampISO8601Format + "\n" +<Scope> + "\n" +
            Hex(SHA256Hash(<CanonicalRequest>))
            

            常量字符串AWS4-HMAC-SHA256指定用户使用的哈希算法HMAC-SHA256。

            timeStamp是ISO 8601格式的当前UTC时间(例如20180501T000000Z)。

            Scope是将生成的签名绑定到指定日期,OOS区域和服务。

            date.Format(<YYYYMMDD>) + "/" + <region> + "/" + <service> + "/aws4_request"
            
          3. 计算签名
            使用SecretAccessKey作为初始哈希操作的密钥,对请求日期、区域和服务执行一系列加密哈希操作(HMAC 操作),从而派生签名密钥。伪代码如下:

            DateKey = HMAC-SHA256("AWS4"+"<SecretAccessKey>", "<YYYYMMDD>") DateRegionKey = HMAC-SHA256(<DateKey>, "< region>") DateRegionServiceKey = HMAC-SHA256(<DateRegionKey>, "<service>") SigningKey = HMAC-SHA256(<DateRegionServiceKey>, "aws4_request")
            

            最终签名是使用签名密钥作为密钥,对待签名字符串计算得到HMAC-SHA256哈希值。伪代码如下:

            HMAC-SHA256(SigningKey, StringToSign)
            
          4. 将签名信息添加到请求头

            在计算签名后,将其添加到请求的HTTP请求头或查询字符串中。

            将签名信息添加到Authorization标头的伪代码如下:

            Authorization: <algorithm> Credential=<ak>/<credential_scope>, SignedHeaders=<SignedHeaders>, Signature=<signature>
            

          示例

          以下是使用V4签名的示例。示例中使用的访问密钥如下:

          参数 值
          AccessKeyID 2a948fd3f00ba0925806
          SecretAccessKey ef2017c2e5ffa0b1761717ecbca021da16501384

          Bucket名称:example-bucket。
          访问的域名是oos-cn.ctyunapi.cn, region是cn。

          示例:GET文件

          从存储桶example-bucket中获取文件test.txt的前10个字节。请求如下:

          GET /test.txt HTTP/1.1
          x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
          Authorization: SignatureToBeCalculated
          x-amz-date: 20190220T060724Z
          Range: bytes=0-9
          Host: example-bucket.oos-cn.ctyunapi.cn
          

          由于此GET请求不提供任何请求体内容,因此该x-amz-content-sha256请求头的值是空请求体的哈希值。以下步骤显示Authorization请求头的计算的方法。

          1. StringToSign
            1. 创建规范请求

              GET
              /test.txt
              
              host:example-bucket.oos-cn.ctyunapi.cn
              range:bytes=0-9
              x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
              x-amz-date:20190220T060724Z
              
              host;range;x-amz-content-sha256;x-amz-date
              e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
              

              其中,最后一行是空请求体的hash值。第三行是空,因为此请求不包含请求参数。

            2. 待签名字符串

              AWS4-HMAC-SHA256
              20190220T060724Z
              20190220/cn/s3/aws4_request
              a6417debbe1fe886b8ed84dca872475f7f09b01961af10d30fa601bc0986ba36
              
          2. 生成签名密钥
            signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<SecretAccessKey>","20190220"),"cn"),"s3"),"aws4_request")
            
          3. 计算后的签名
            dcefeb864c1ffad98f8f0307af32ceb584b38dc2a9c7a65459363cdb03fc6f12
            
          4. Authorization请求头
            Authorization: AWS4-HMAC-SHA256 Credential=2a948fd3f00ba0925806/20190220/cn/s3/aws4_request, SignedHeaders=host;range;x-amz-content-sha256;x-amz-date, Signature=dcefeb864c1ffad98f8f0307af32ceb584b38dc2a9c7a65459363cdb03fc6f12
            

          示例:PUT文件

          在存储桶example-bucket中上传文件test.txt。

          PUT /test.txt HTTP/1.1
          x-amz-content-sha256: 7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9
          Authorization:SignatureToBeCalculated
          x-amz-date: 20190220T070722Z
          x-amz-storage-class: STANDARD
          Host: example-bucket.oos-cn.ctyunapi.cn
          Content-Length: 12
          
          hello world!
          

          以下步骤显示Authorization请求头的计算的方法。

          1. StringToSign
            1. 创建规范请求

              PUT
              /test.txt
              
              content-length:12
              host:example-bucket.oos-cn.ctyunapi.cn
              x-amz-content-sha256:7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9
              x-amz-date:20190220T070722Z
              x-amz-storage-class:STANDARD
              
              content-length;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class
              7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9
              

              其中,第三行是空,因为此请求不包含请求参数。最后一行是请求体的hash值,它必须与x-amz-content-sha256 请求头的值相同。

            2. 待签名字符串

              AWS4-HMAC-SHA256
              20190220T070722Z
              20190220/cn/s3/aws4_request
              013accc1b2460f530908e106224c57d9fcf9ed74986f5399e27196b73824ddf3
              
          2. 生成签名密钥
            signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<SecretAccessKey>","20190220"),"cn"),"s3"),"aws4_request")
            
          3. 计算后的签名
            5c4e3bc9b2589f2d451a7570cb1283637691f95671525fb0223a1fd158f5fee1
            
          4. Authorization请求头
            Authorization: AWS4-HMAC-SHA256 Credential=2a948fd3f00ba0925806/20190220/cn/s3/aws4_request, SignedHeaders=contentlength;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class, Signature=5c4e3bc9b2589f2d451a7570cb1283637691f95671525fb0223a1fd158f5fee1
            

          示例:列出存储桶中的文件

          列出存储桶example-bucket中的文件,prefix设置为“t”,最多返回2个文件。请求如下:

          GET /?max-keys=2&prefix=t HTTP/1.1
          x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
          Authorization: SignatureToBeCalculated
          x-amz-date: 20190220T085955Z
          Host: example-bucket.oos-cn.ctyunapi.cn
          

          以下步骤显示Authorization请求头的计算的方法。

          1. StringToSign
            1. 创建规范请求

              GET
              /
              max-keys=2&prefix=t
              host:example-bucket.oos-cn.ctyunapi.cn
              x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
              x-amz-date:20190220T085955Z
              
              host;x-amz-content-sha256;x-amz-date
              e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
              

              其中,最后一行是空请求体的hash值。

            2. 待签名字符串

              AWS4-HMAC-SHA256
              20190220T085955Z
              20190220/cn/s3/aws4_request
              3b6553685b6c201cd38cb1077fe657b0f55b355e7ae011e31fa244d009c4d43a
              
          2. 生成签名密钥
            signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<SecretAccessKey>","20190220"),"cn"),"s3"),"aws4_request")
            
          3. 计算后的签名
            72c3758e3b8f27a1a9d9d38b4c143329d3094bc8156d28581bfdd5b7663d6ca8
            
          4. Authorization请求头
            Authorization: AWS4-HMAC-SHA256 Credential=2a948fd3f00ba0925806/20190220/cn/s3/aws4_request, SignedHeaders=host;x-amzcontent-sha256;x-amz-date, Signature=72c3758e3b8f27a1a9d9d38b4c143329d3094bc8156d28581bfdd5b7663d6ca8
            
          文档反馈

          建议您登录后反馈,可在建议与反馈里查看问题处理进度

          鼠标选中文档,精准反馈问题

          选中存在疑惑的内容,即可快速反馈问题,我们会跟进处理

          知道了

          上一篇 :  认证方法
          下一篇 :  使用查询参数验证
          搜索 关闭
          ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
          公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
          备案 京公网安备11010802043424号 京ICP备 2021034386号
          ©2025天翼云科技有限公司版权所有
          京ICP备 2021034386号
          备案 京公网安备11010802043424号
          增值电信业务经营许可证A2.B1.B2-20090001
          用户协议 隐私政策 法律声明