身份验证
Clanforge 支持基本 HTTP 身份验证和 AWS 身份验证。这两种身份验证方法都依赖于您的帐户凭据。您的凭据包括您的访问密钥和 Secret Key。请访问 Clanforge 上的 Auth Keys(身份验证密钥)页面,以访问和管理您的凭据。
基本身份验证
Clanforge API 支持基本 HTTP 身份验证。您可以通过 HTTP 请求的授权标头传递 Clanforge 身份验证密钥(即访问密钥和 Secret Key)的 base64 编码字符串,从而使用 Clanforge 进行身份验证。
注意:请确保将请求的内容设为 application/x-www-form-urlencoded
。
Authorization: Basic {base64_encode(AccessKey:SecretKey)}
Clanforge API 支持通过 HTTPS 进行基本 HTTP 身份验证以及通过 AWS 签名版本 4 进行身份验证。通过不安全的 HTTP 连接发送任何请求时,都会重定向至 HTTPS。
AWS 签名版本 4 身份验证
已弃用:鉴于 AWS4 身份验证实现的复杂程度,虽然我们不打算将其移除,但也不建议使用。
Clanforge 支持通过 HTTP 授权标头使用 AWS 签名版本 4 来包含身份验证信息。以下代码块展示了请求通过 AWS 签名版本 4 进行身份验证时的授权标头值示例。
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/eu-west-1/cf/aws4_request,SignedHeaders=host;range;x-amz-date,Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
**注意:**第一个部分与第二个部分(即 AWS4-HMAC-SHA256 和 Credential)之间有空格,而其余部分(即 Credential、SignedHeaders 和 Signature)之间用逗号分隔,没有空格。
下表描述了授权标头值的各个组成部分。
组成部分 | 描述 |
---|---|
AWS4-HMAC-SHA256 | AWS4-HMAC-SHA256 是用于计算签名的算法。使用 AWS 签名版本 4 进行身份验证时,必须包含此值。该字符串指定 AWS 签名版本 4 (AWS4) 和签名算法 (HMAC-SHA256)。 |
Credential | Credential 部分包含访问密钥和范围信息,这包括用于计算签名的日期、地区和服务。该字符串采用以下形式:<AccessKey>/<date>/<region>/<service>/aws4_request |
SignedHeaders | SignedHeaders 部分是一个以分号分隔的列表,其中列出了用于计算签名的请求标头。该列表仅包含标头名称,并且标头名称必须使用小写字母。例如,host;range;x-amz-date 是有效的,但 host;Range;X-AMZ-DATE 是无效的。 |
Signature | Signature 是一个由 64 个小写十六进制字符表示的 256 位签名。 |
计算签名
要计算签名,首先要确定要签名的字符串。确定要签名的字符串后,使用签名密钥来计算该字符串的 HMAC-SHA256 哈希值。
Clanforge 在收到经过身份验证的请求时,会计算签名,然后将其与请求中提供的签名进行比较。您必须使用 Clanforge 所用的同一方法来计算签名。将请求整理成一个约定形式以进行签名的过程称为规范化。
CanonicalRequest
组件 | 数据 | 注意 |
---|---|---|
HTTP Verb + “\n” + | “GET”、“PUT”、“POST”或“OPTIONS”… | |
CanonicalURI + “\n” + | UriEncode() | CanonicalURI 是 URI 中绝对路径部分的 URI 编码版本,包括域名后从“/”开始,一直到字符串结尾的所有内容,如果存在查询字符串参数,则止于问号字符 (?)。例如,在 URIhttp://s3.amazonaws.com/examplebucket/myphoto.jpg 中,/examplebucket/myphoto.jpg 就是绝对路径。 |
CanonicalQueryString + “\n” + | UriEncode() + “=” + UriEncode() + “&” +UriEncode() + “=” + UriEncode() + “&” +…UriEncode() + “=” + UriEncode() | 按照 QueryParam 的字母顺序进行排序 |
CanonicalHeaders + “\n” + | Lowercase() + “:” + Trim() + “\n” +Lowercase() + “:” + Trim() + “\n” +…Lowercase() + “:” + Trim() + “\n” | 按照 HeaderName 的字母顺序进行排序,如果是在日期标头中,还必须包含以下内容:HTTP Host HeaderContent-Type Header |
SignedHeaders + “\n” + | Lowercase() + “;” +Lowercase() + “;” +…Lowercase() | 按照 HeaderName 的字母顺序进行排序 |
HashedPayload | Hex(SHA256Hash()) | 该十六进制值是请求有效负载的 SHA256 哈希值。如果不存在有效负载,例如 GET 请求,则应当使用空字符串的哈希值(例如,Hex(SHA256Hash(“”))。 |
StringToSign
组件 | 数据 | 示例 |
---|---|---|
“AWS4-HMAC-SHA256” + “\n” + | 授权类型 | |
TimeStamp + “\n” + | ISO8601 紧凑格式 | “201407240525T000000Z” |
Scope + “\n” + | <yyyymmdd> /<region> /<service> /aws4_request | “20140724/eu-west-1/cf/aws4_request” |
Hex(SHA256Hash(<CanonicalRequest> )) |
SigningKey
组成部分 | 描述 |
---|---|
DateKey | HMAC-SHA256(“AWS4” + <SecretAccessKey> , “<yyyymmdd> ”) |
DateRegionKey | HMAC-SHA256(<DateKey> , <region> ) |
DateRegionServiceKey | HMAC-SHA256(<DateRegionKey> , <service> ) |
SigningKey | HMAC-SHA256(<DateRegionServiceKey> , “aws4_request”) |
函数定义
组成部分 | 描述 |
---|---|
Lowercase() | 将字符串转换为小写形式。 |
Hex(<string> ) | 小写 base 16 编码。 |
Trim(<string> ) | 移除任何开头或末尾空格。 |
UriEncode(<string> ) | URI 对每个字节进行编码。 |
HMAC-SHA256(<key> , <data> ) | 通过对 <data> , <key> 进行安全散列算法 (SHA) HMAC-SHA-256 摘要计算而得到的密钥散列消息认证码,结果以二进制字符串形式进行编码。 |
常数和变量
变量 | 有效值 | 描述 |
---|---|---|
<region> | eu-west-1 | 用来处理请求的服务地区始终为 eu-west-1 。 |
<service> | cf | 请求所针对的服务。服务应为 Clanforge/Multiplay,简写为 cf 。 |
“\n” | 0x0a | 0x0a 是 ASCII 换行字符。 |
<AccessKey> | 与您的帐户关联的访问密钥。它是一个十六进制值。 | |
<SecretKey> | 与您提供的访问密钥相关联的 Secret Key。它是一个十六进制值。 | |
Host | Clanforge API 服务地址。如果您正在进行 Postman 测试,则可能需要手动更新 Host 变量。 |