签名机制
<p><span style="font-size:16px"><strong>签名机制简介</strong></span></p>
<p>通过AccessKey的方式访问后台接口,主要是通过签名校验的方式,鉴定用户请求的url是否在传输过程中被篡改过,</p>
<ul>
<li>若签名校验通过,则认为请求没有被篡改过,后台会将请求转发到具体的服务。</li>
<li>若签名校验失败,则被认为由于一些原因,导致当前请求是不安全的,例如用户请求的url被篡改过,用户请求过期等,后台将拒绝提供服务。</li>
</ul>
<p>在云门户注册主用户或创建子用户后,可以为每个用户生成一对AccessKey,AccessKey由AccessKeyId与AccessKeySecret组成。通过AccessKeyId,可以在后台查出唯一对应的用户的详细信息;AccessKeySecret则作为秘钥,用于对请求进行签名。AccessKeySecret需要用户严格保密,来防止被盗用后用于冒充用户进行签名。</p>
<p>目前,使用签名校验的方式访问后台接口,请求的url参数由以下几个部分组成:</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:464px">
<tbody>
<tr>
<td style="background-color:#ededed; vertical-align:top; width:225px">
<p><strong>参数名称</strong></p>
</td>
<td style="background-color:#ededed; vertical-align:top; width:233px">
<p><strong>参数是否参与计算签名</strong></p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:225px">
<p>accessKeyId</p>
</td>
<td style="vertical-align:top; width:233px">
<p>是</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:225px">
<p>signature</p>
</td>
<td style="vertical-align:top; width:233px">
<p>否</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:225px">
<p>signatureMethod</p>
</td>
<td style="vertical-align:top; width:233px">
<p>是</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:225px">
<p>signatureNonce</p>
</td>
<td style="vertical-align:top; width:233px">
<p>是</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:225px">
<p>signatureVersion</p>
</td>
<td style="vertical-align:top; width:233px">
<p>是</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:225px">
<p>timestamp</p>
</td>
<td style="vertical-align:top; width:233px">
<p>是</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:225px">
<p>version</p>
</td>
<td style="vertical-align:top; width:233px">
<p>是</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:225px">
<p>具体业务接口参数</p>
</td>
<td style="vertical-align:top; width:233px">
<p>是</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><span style="font-size:16px"><strong>签名生成过程</strong></span></p>
<p>以查询地域ListZones接口为例,调用该接口,需要传入的业务参数为action=ListZones,regionId=Region-southChina。</p>
<p>必传的其他参数如公共请求参数部分所述,包括:</p>
<p>accessKeyId=xKJSFaxRfWT_7H0vSzkXLj5gzuS5HDzOkepNGbHWPtDj3mqlg_9nXf4XR23zSm1J_VPlTcXCFMx3JV0UTUDBeA,</p>
<p>signatureMethod=HMAC-SHA1,</p>
<p>signatureNonce=3378010751426913252,</p>
<p>signatureVersion=1.0,</p>
<p>timestamp= 1534159280463,</p>
<p>version=2017-01-01</p>
<p>以上参数是需要参与计算签名的请求参数。</p>
<p>(1) 首先要对这些参数,根据参数名称按照字母序进行排序,得到的请求参数为:accessKeyId=xKJSFaxRfWT_7H0vSzkXLj5gzuS5HDzOkepNGbHWPtDj3mqlg_9nXf4XR23zSm1J_VPlTcXCFMx3JV0UTUDBeA&action=ListZones&regionId=Region-southChina&signatureMethod=HMAC-SHA1&signatureNonce=3378010751426913252&signatureVersion=1.0&timestamp=1534159280463&version=2017-01-01。</p>
<p>(2) 然后对请求参数,利用HmacSHA1算法进行签名计算,计算签名需要使用AccessKeySecret,用户的AccessKeySecret是存储在客户端的,因此用户可以自行设置,利用AccessKeySecret和其他签名过程中必须的参数,可以计算得到最终的签名signature的值。通常,我们会通过SDK等方式,在用户端集成或提供生成签名或生成请求url的便捷方法。</p>
<p>(3) 客户端利用签名和其他请求参数,生成请求url,开始请求服务端。</p>
提交成功!非常感谢您的反馈,我们会继续努力做到更好!