签名URL请求

必须向 AWS PaaS提出的API请求进行签名,签名信息中必须包括 AWS PaaS可以用来对请求者进行身份验证的信息,该信息由AWS CC的秘钥服务提供。

AWS PaaS云服务的所有请求已全面启用SSL。如果您采取了私有部署,为了获得额外的安全性,建议使用 HTTPS 安全套接字层 (SSL) 传输URL请求。SSL 可以加密传输,从而保护请求或响应,避免数据在传输过程中被查看、篡改。

何时需要签名请求?

如果您正在使用AWS PaaS的某一HTTP API客户端开发工具包(例如:AWS HTTP SDK for Java API工具包),则无需考虑签名过程。开发者只需配置访问秘钥,这些客户端工具包会在发送请求时,会自动完成签名过程。

如果您以编程方式向AWS PaaS构建HTTP或HTTPS 的API请求,则必须按照签名方法自己完成这个过程,即向发起的URL提供sig参数值。

实际上,无论您使用了HTTP API客户端开发工具包还是构建自己的URL请求,AWS PaaS只接受被签名的请求

为什么要签名请求?

AWS PaaS通过签名保护开放的URL安全:

  • 验证请求者的身份。确保该请求是来自AWS PaaS秘钥授权的开发者程序,有关如何获得秘钥,请访问这里
  • 保护传输中的数据。为了防止URL在传输时参数值被恶意篡改、注入,API URL请求的参数被要求进行哈希(摘要)计算,得到的哈希值被包括在请求中的sig参数。在AWS PaaS收到请求时,将基于相同签名方法重新计算哈希,并将其与请求中包括的哈希值进行匹配。如果哈希值不匹配,AWS PaaS 将返回401(未授权被拒绝)错误码
  • 防止潜在的URL攻击。被签名的URL被要求必须在5分钟内到达AWS PaaS的服务器,逾期将返回403(请求超时被拒绝)错误码

URL请求的签名过程

签名的目标是由开发者在API客户端计算出系列参数组合的哈希值,将产生的信息添加到URL请求的sig参数。

  1. 获得秘钥
  2. 计算签名

1.获得秘钥

这里介绍API请求中签名 ( sig ) 的生成方法。签名需要开发者先在控制台创建API密钥 ,获得访问凭证 ( access_key ) 和私钥 ( secret ),这里我们假设

access_key = 'Salesforce#1'
secret = '0a799959-8327'

2.计算签名

例如API请求参数如下(这是一个 app.install.check API):

{
    "timestamp":"1439279383630",
    "sig_method":"HmacMD5",
    "cmd":"app.install.check",
    "appId":"com.actionsoft.apps.notification",
    "access_key":"Salesforce#1",
    "format":"json"
}

1. 按参数名进行升序排列

准备参数。范围:cmd,access_key,timestamp,format,sig_method和业务参数(见API输入参数文档),其中不包括空值参数

排序后的参数为:

{
    "access_key":"Salesforce#1",
    "appId":"com.actionsoft.apps.notification",
    "cmd":"app.install.check",
    "format":"json",
    "sig_method":"HmacMD5",
    "timestamp":"1439279383630"
}

2. 构造签名串

secret字符串开头,追加排序后参数名称和值,格式:secretkey1value1key2value2...

应用到上述示例得到签名串为(注意:签名串中间没有空格分割):

0a799959-8327access_keySalesforce#1appIdcom.actionsoft.apps.notificationcmdapp.install.checkformatxmlsig_methodHmacMD5timestamp1439277618461

3. 计算签名

计算被签名串加密的签名。

  • 将API密钥的私钥 (secret) 作为key,生成被签名串的 HmacMD5签名
  • 将签名得到的16字节依次转化为大写的16进制字符串,如果字符串长度为1,在前补0,结果为32位字符串,例如:050CC7A1C04487EAE1197C31D28B7E37

4. 添加签名

将计算的签名值以sig参数名,附加到URL请求中。一个典型的API请求如下所示

这是一个 app.install.check 的API请求

https://b2b.awspaas.com/openapi?timestamp=1439277618461
&sig_method=HmacMD5
&cmd=app.install.check
&appId=com.actionsoft.apps.notification
&access_key=Salesforce#1
&format=json
&sig=DE90336BEDB0C3D3FE6DEE2FF0DF11AC


Seven
 010-62962343-690
 liujx@actionsoft.com.cn
感谢您对该文档的关注!如果您对当前页面内容有疑问或好的建议,请与我联系。如果您需要解答相关技术问题请登录AWS客户成功社区