一个完整的阿里云OpenAPI请求,包含以下部分。
名称
是否必选
描述
示例值
协议
是
服务地址
即Endpoint。您可以查阅不同云产品的服务接入地址文档,查阅不同服务区域下的服务地址。
cs.aliyuncs.com
resource_URI_parameters(接口URL)
接口URL,包括接口路径和位置在path、query的接口请求参数。
/clusters/{cluster_id}/triggers
RequestHeader(请求头信息)
请求头信息,通常包含API的版本、Host、Authorization等信息。后文将详细说明。
x-acs-action
RequestBody
cluster_id
HTTPMethod
请求使用的方法,ROA接口请求方法包括PUT、POST、GET、DELETE。
POST
类型
String
RunInstances
x-acs-version
2014-05-26
Authorization
非匿名请求必须
用于验证请求合法性的认证信息,格式为Authorization:SignatureAlgorithmCredential=AccessKeyId,SignedHeaders=SignedHeaders,Signature=Signature。
其中SignatureAlgorithm为签名加密方式,为ACS3-HMAC-SHA256。
SignedHeaders为请求头中包含的参与签名字段键名,【说明】:除了Authorization之外,建议对所有公共请求头添加签名,以提高安全性。
Signature为请求签名,取值参见签名机制。
ACS3-HMAC-SHA256Credential=YourAccessKeyId,SignedHeaders=host;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version,Signature=e521358f7776c97df52e6b2891a8bc73026794a071b50c3323388c4e0df64804
x-acs-signature-nonce
签名唯一随机数。该随机数用于防止网络重放攻击,每一次请求都必须使用不同的随机数。
d410180a5abf7fe235dd9b74aca91fc0
x-acs-date
2023-10-26T09:01:01Z
host
ecs.cn-shanghai.aliyuncs.com
x-acs-content-sha256
请求正文Hash摘要后再base-16编码的结果,与HashedRequestPayload一致。
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-acs-security-token
STS认证必传
为调用AssumeRole接口返回值中SecurityToken的值。
为保证API的安全调用,在调用API时阿里云会对每个API请求通过签名(Signature)进行身份验证。无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名信息。
请求及返回结果都使用UTF-8字符集进行编码。
对于每一次HTTP或者HTTPS协议请求,阿里云会根据访问中的签名信息验证访问请求者身份。您在访问时签名信息时,请按照以下方法对请求进行签名处理:
使用AK/SK方式进行签名与认证,首先需要规范请求内容,然后再进行签名。客户端与云服务API网关使用相同的请求规范,可以确保同一个HTTP请求的前后端得到相同的签名结果,从而完成身份校验。
构造规范化请求(CanonicalRequest)的伪代码如下:
ROA风格API该参数为元数据文件中path的值,例如/api/v1/clusters。
当请求的查询字符串为空时,使用空字符串作为规范化查询字符串。
除Authorization外的所有公共请求头,只要符合要求的参数都必须被加入签名。
伪代码如下:
CanonicalHeaderEntry=Lowercase(HeaderName)+':'+Trim(HeaderValue)+'\n'CanonicalHeaders=CanonicalHeaderEntry0+CanonicalHeaderEntry1+...+CanonicalHeaderEntryN伪代码如下:
SignedHeaders=Lowercase(HeaderName0)+';'+Lowercase(HeaderName1)+...+Lowercase(HeaderNameN)表1:签名协议与签名算法、摘要函数的对应关系
签名协议(SignatureAlgorithm)
处理RequestPayload以及CanonicalRequest时使用的摘要函数(Hash)
计算签名时实际使用的签名算法
(SignatureMethod)
ACS3-HMAC-SHA256
SHA256
HMAC-SHA256
按照以下伪代码构造待签名字符串(stringToSign):
StringToSign=SignatureAlgorithm+'\n'+HashedCanonicalRequest步骤三:计算签名按照以下伪代码计算签名值(Signature)。
Signature=HexEncode(SignatureMethod(Secret,StringToSign))步骤四:将签名添加到请求中计算完签名后,构造Authorization请求头,格式为:Authorization:
示例代码的运行环境是JDK1.8,您可能需要根据具体情况对代码进行相应的调整。
运行Java示例,需要您在pom.xml中添加以下Maven依赖。
需要您手动安装pytz和requests,请根据您所使用的Python版本在终端(Terminal)执行以下命令。
Python3
需要您在终端(Terminal)执行以下命令:
本示例所用语言是javaScript。
运行Rust示例,需要您在Cargo.toml中添加以下依赖。
所需参数名称
假设的参数值
AccessKeyID
YourAccessKeyId
AccessKeySecret
YourAccessKeySecret
3156853299f313e23d1673dc12e1703d
2023-10-26T10:22:32Z
签名流程如下:
解决方案:请首先根据固定签名示例验证您的签名过程是否正确,逐步对比每个步骤的返回内容与固定签名示例的一致性。如发现不一致之处,请仔细阅读签名机制中相应步骤的说明。
当您在计算签名时遇到无法解决的问题时,可以加入钉钉群:78410016550,联系值班同学进行咨询。