智能接入网关接口调用是通过向智能接入网关API的服务端地址发送HTTP GET请求,请按照接口说明在请求中加入相应请求参数,调用后系统会返回处理结果。请求及返回结果都使用UTF-8字符集进行编码。
请求结构
智能接入网关的API是RPC风格,您可以通过发送HTTP GET请求调用智能接入网关API。
其请求结构如下:
http://endpoint/?Action=xx¶meters
其中:
- Endpoint:智能接入网关API的服务接入地址为 smartag.cn-shanghai.aliyuncs.com。
- Action:要执行的操作,如使用DescribeSmartAccessGateways查询已创建的智能接入网关实例。
- Version:要使用的API版本,智能接入网关的API版本是2018-03-13。
- Parameters:请求参数,每个参数之间用“&”分隔。
请求参数由公共请求参数和API自定义参数组成。公共参数中包含API版本号、身份验证等信息。
下面是一个调用DescribeSmartAccessGateways接口查询已创建的智能接入网关实例的示例:
为了便于用户查看,本文档中的示例都做了格式化处理。
https://smartag.cn-shanghai.aliyuncs.com/?Action=DescribeSmartAccessGateways
&Format=xml
&Version=2018-03-13
&Signature=xxxx%xxxx%3D
&SignatureMethod=HMAC-SHA1
&SignatureNonce=15215528852396
&SignatureVersion=1.0
&AccessKeyId=key-test
&Timestamp=2018-04-01T12:00:00Z
API授权
为了确保您的账号安全,建议您使用子账号的身份凭证调用API。如果您使用RAM账号调用智能接入网关API,您需要为该RAM账号创建、附加相应的授权策略。详情参见RAM鉴权。
API签名
智能接入网关服务会对每个API请求进行身份验证,无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名(Signature)信息。
智能接入网关通过使用AccessKey ID和AccessKey Secret进行对称加密的方法来验证请求的发送者身份。AccessKey是为阿里云账号和RAM用户发布的一种身份凭证(类似于用户的登录密码),其中AccessKey ID 用于标识访问者的身份,AccessKey Secret是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密,只有阿里云和用户知道。
用户在访问时,按照下面的方法对请求进行签名处理:
- 使用请求参数构造规范化的请求字符串(Canonicalized Query String)。
- 按照参数名称的字典顺序对请求中所有的请求参数(包括文档中描述的“公共请求参数”和给定了的请求接口的自定义参数,但不能包括“公共请求参数”中提到Signature参数本身)进行排序。
注意 当使用GET方法提交请求时,这些参数就是请求URL中的参数部分(即URL中“?”之后由“&”连接的部分)。
- 对每个请求参数的名称和值进行编码。名称和值要使用UTF-8字符集进行URL编码,URL编码的编码规则是:
- 对于字符 A-Z、a-z、0-9以及字符(-)、(_)、(.)、(~)不编码。
- 对于其他字符编码成“%XY”的格式,其中XY是字符对应ASCII码的16进制表示。比如英文的双引号(”)对应的编码就是%22。
- 对于扩展的UTF-8字符,编码成“%XY%ZA…”的格式。
- 需要说明的是英文空格( )要被编码是%20,而不是加号(+)。
注意 一般支持URL编码的库(比如Java中的java.net.URLEncoder)都是按照“application/x-www-form-urlencoded”的MIME类型的规则进行编码的。实现时可以直接使用这类方式进行编码,把编码后的字符串中加号(+)替换成%20、星号(*)替换成%2A、%7E替换回波浪号(~),即可得到上述规则描述的编码字符串。
- 对编码后的参数名称和值使用英文等号(=)进行连接。
- 再把英文等号连接得到的字符串按参数名称的字典顺序依次使用&符号连接,即得到规范化请求字符串。
- 按照参数名称的字典顺序对请求中所有的请求参数(包括文档中描述的“公共请求参数”和给定了的请求接口的自定义参数,但不能包括“公共请求参数”中提到Signature参数本身)进行排序。
- 使用上一步构造的规范化字符串按照下面的规则构造用于计算签名的字符串:
参数说明:StringToSign= HTTPMethod + "&" + percentEncode("/") + "&" + percentEncode(CanonicalizedQueryString)
- HTTPMethod:提交请求用的HTTP方法,例如GET。
- percentEncode(“/“):按照1.ii中描述的URL编码规则对字符“/”进行编码得到的值,即“%2F”。
- percentEncode(CanonicalizedQueryString):对第1步中构造的规范化请求字符串按步骤1.ii中描述的URL编码规则编码后得到的字符串。
- 按照RFC2104的定义,使用上面的用于签名的字符串计算签名HMAC值。
注意 计算签名时使用的Key就是用户持有的Access Key Secret并加上一个“&”字符(
ASCII:38
),使用的哈希算法是SHA1。 - 按照Base64编码规则把上面的HMAC值编码成字符串,即得到签名值(Signature)。
- 将得到的签名值作为Signature参数添加到请求参数中,即完成对请求签名的过程。
说明 得到的签名值在作为最后的请求参数值提交给智能接入网关服务的时候,要和其他参数一样,按照RFC3986的规则进行URL编码。以DescribeSmartAccessGateways为例,签名前的请求URL为:
http://smartag.cn-shanghai.aliyuncs.com/?Timestamp=2016-04-23T12:46:24Z&Format=XML&AccessKeyId=testid&Action=DescribeSmartAccessGateways&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2018-03-13&SignatureVersion=1.0
- 那么StringToSign就是:
GET&%2F&AccessKeyId%3Dtestid&Action%DescribeSmartAccessGateways&Format%3DXML&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&SignatureVersion%3D1.0&Timestamp%3D2018-04-23T12%253A46%253A24Z&Version%3D2018-03-13
- 假如使用的Access Key Id是“testid”,Access Key Secret是“testsecret”,用于计算HMAC的Key就是“testsecret&”,则计算得到的签名值是:
CT9X0VtwR86fNWSnsc6v8YGOjuE=
签名后的请求URL为(注意增加了Signature参数):http://smartag.cn-shanghai.aliyuncs.com/?Timestamp=2016-04-23T12%3A46%3A24Z&Format=XML&AccessKeyId=testid&Action=DescribeSmartAccessGateways&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&SignatureVersion=1.0&Version=2018-03-13&Signature=CT9X0VtwR86fNWSnsc6v8YGOjuE%3D