Skip to content
大纲

签名流程

出于安全考虑,除部分匿名请求外,绝大多数对Flyme云对象存储的API请求都需要使用访问密钥(包括访问密钥ID(AK)和秘密访问密钥(SK)),这两个密钥通常成为您的安全凭证。

本章节将介绍Flyme云对象存储签名计算的工作原理和工作流程。

名词解释

本章节涉及的核心名词解释如下:

  • 认证字符串(authorization): 非匿名API请求中必须携带的认证信息,也是最终API中要求的Authorization字段。由前缀字符串、签名头域及签名摘要拼接而成。
  • 前缀字符串(authStringPrefix): 认证字符串的前缀部分,用于生成派生签名密钥(signingKey)和最终认证字符串的拼接。
  • 签名头域(signedHeaders):加入签名算法的HTTP头域列表,为认证字符串的中间部分。
  • 规范请求(canonicalRequest):经过规范化处理后的请求信息,又称待签名串。
  • 派生签名密钥(signingKey):Flyme云对象存储不直接使用用户SK对待签名串生成摘要,而是使用SK和前缀字符串生成派生签名密钥,然后使用派生密钥对规范请求生成最终签名摘要。
  • 签名摘要(signature):Flyme云对象存储使用派生签名密钥对规范请求进行HMAC算法计算得到,为最终认证字符串的后半部分。

签名计算的工作原理

对Flyme云对象存储的API请求包含了如下流程:

  1. 创建前缀字符串(authStringPrefix)。
  2. 创建规范请求(canonicalRequest),即待签名字符串,在此过程中可同时确定签名头域(signedHeaders)。
  3. 使用您的Flyme云秘密访问密钥(SK)与前缀字符串(authStringPrefix),通过HMAC算法计算出派生签名密钥(signingKey)。
  4. 使用派生签名密钥对规范请求进行签名计算,得到最终的签名摘要。
  5. 将前缀字符串和上一步生成的签名摘要拼接为认证字符串,并添加到API请求的标头(Header)中或者添加到查询字符串参数。

Flyme云对象存储服务收到请求后,将按照上述相同步骤来计算请求中发送的签名。然后对计算得到的签名与您在请求中发送的签名进行比较。如果签名匹配,则继续处理请求,如果签名不匹配,则拒绝请求,并报错。

更多签名计算相关信息,请参考如下链接: