AWS 签名方法

文章链接:https://www.mtyun.com/doc/api/mss/mss/aws-v4–qian-ming
本文旨在理解什么是签名,大体流程,作为最基础了解,深入部分不做任何介绍。
签名:可以简单理解为通过一种加密方法对要传输的数据进行处理。

签名方式

签名方式大致分为两种:
1.HTTP头部签名 - 使用HTTP签名头部是认证MSS请求的最常用方法。
2**.HTTP预签名** - 可以使用查询字符串在URL中添加签名信息。因为请求签名是URL的一部分,所以这种类型的URL通常被称为预先签名的URL。可以使用预先分配的网址在HTML中嵌入可点击的链接,该链接最长可以有效七天。

首先说HTTP头部签名:
以下是基于HTTP头部签名方式的请求的Authorization标头值的示例。

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20161208/US/s3/aws4_request, 
SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024

参数说明:
1. AWS4-HMAC-SHA256 :它是用于计算签名的算法。它分为两部分,一部分是AWS4,用来定AWS签名版本4(AWS4),一部分是HMAC-SHA256 ,用来指定签名算法(HMAC-SHA256)。
2. AKIAIOSFODNN7EXAMPLE/20161208/US/s3/aws4_request:我们的访问密钥和其他信息。此字符串具有以下形式:
access-key/date/aws-region/s3/aws4_request
3. SignedHeaders:以分号分隔的请求标头列表,用于计算Signature。 该列表仅包括头名称,并且头名称必须为小写
4. Signature: 它表示为64个小写十六进制字符的256位签名.

计算签名方法:

签名的过程包括如下几步:
1.规范化请求
2.生成待签名字符串
3.签名
AWS 签名方法_第1张图片

                 1.规范化请求

a. HTTP Verb中的Verb是一种HTTP方法,如GET,PUT,HEAD和DELETE
b. CanonicalURI是URI绝对路径组件的URI编码版本 - 以域名后面的“/”开头,直到字符串的末尾或以问号字符(’?’)开头的所有内容
例如:URI /examplebucket/myphoto.jpg是绝对路径,并且不在绝对路径中对“/”进行编码(其中URL可以替换为对应的路径)
c. CanonicalQueryString指定URI编码的查询字符串参数。需要对URI进行编码,并且必须按键名称按字母顺序对规范查询字符串中的参数进行排序,如:prefix=somePrefix&marker=someMarker
d. CanonicalHeaders是请求头及其值的列表。 每个由标题名称和值组成的对由换行符(“\ n”)分隔。 标题名称必须为小写,并且必须按字母顺序对标题名称进行排序以构造字符串,如下所示:

Lowercase()+":"+Trim(<value>)+"\n"
Lowercase()+":"+Trim(<value>)+"\n"

此外,计划要包含在请求中的任何x-amz- *标头也必须添加。
综上,一个完整的CanonicalHeaders如下所示:

host:mtmss.com
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date:20130708T220855Z

e. SignedHeaders是按字母顺序排序的,以分号分隔的小写请求标题名称列表。 列表中的请求标头与您在CanonicalHeaders字符串中包含的标头相同

host;x-amz-content-sha256;x-amz-date

f. HashedPayload是请求有效内容的SHA256散列的十六进制值。

Hex(SHA256Hash(<payload>)
                   2.生成待签名字符串 

你可能感兴趣的:(AWS 签名方法)