身份验证

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-SHA256AWS4-HMAC-SHA256 是用于计算签名的算法。使用 AWS 签名版本 4 进行身份验证时,必须包含此值。该字符串指定 AWS 签名版本 4 (AWS4) 和签名算法 (HMAC-SHA256)。
CredentialCredential 部分包含访问密钥和范围信息,这包括用于计算签名的日期、地区和服务。该字符串采用以下形式:<AccessKey>/<date>/<region>/<service>/aws4_request
SignedHeadersSignedHeaders 部分是一个以分号分隔的列表,其中列出了用于计算签名的请求标头。该列表仅包含标头名称,并且标头名称必须使用小写字母。例如,host;range;x-amz-date 是有效的,但 host;Range;X-AMZ-DATE 是无效的。
SignatureSignature 是一个由 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 的字母顺序进行排序
HashedPayloadHex(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

组成部分描述
DateKeyHMAC-SHA256(“AWS4” + <SecretAccessKey>, “<yyyymmdd>”)
DateRegionKeyHMAC-SHA256(<DateKey>, <region>)
DateRegionServiceKeyHMAC-SHA256(<DateRegionKey>, <service>)
SigningKeyHMAC-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”0x0a0x0a 是 ASCII 换行字符。
<AccessKey> 与您的帐户关联的访问密钥。它是一个十六进制值。
<SecretKey> 与您提供的访问密钥相关联的 Secret Key。它是一个十六进制值。
Host Clanforge API 服务地址。如果您正在进行 Postman 测试,则可能需要手动更新 Host 变量。