访问验证
<p>请求进入后端服务时,后台会根据请求的url,进入不同的认证逻辑。使用签名的方式访问后端服务,后端将会进入到校验签名的逻辑。</p>
<p>后端接到请求时,会获取到所有的请求参数,以下仅为示例,后端获取的请求参数可能是无序的:</p>
<p>accessKeyId=xKJSFaxRfWT_7H0vSzkXLj5gzuS5HDzOkepNGbHWPtDj3mqlg_9nXf4XR23zSm1J_VPlTcXCFMx3JV0UTUDBeA</p>
<p>action=ListZones</p>
<p>regionId=Region-southChina</p>
<p>signatureMethod=HMAC-SHA1</p>
<p>signatureNonce=3378010751426913252</p>
<p>signatureVersion=1.0</p>
<p>timestamp=1534159280463</p>
<p>version=2017-01-01&signature</p>
<p>(1) 首先后端会取出所有请求参数和请求参数值,但会将signature参数排除,然后对排除signanture参数的其他参数,按照参数名称,以字母序进行排序。</p>
<p>(2) 后端会根据AccessKeyId,在数据库中查找到AccessKeySecret,然后利用AccessKeySecret,对已经进行过排序的请求参数,进行签名的计算</p>
<p>(3) 后端得到签名计算结果后,与请求传入的签名结果进行比较,若签名结果一致,则认为请求合法,将请求转发到具体服务,否则拒绝服务。</p>
<p>签名校验过程中,将依次对下面几个条件进行单独校验(见下表),任何一个环节校验失败,请求都将不会被执行,只有所有校验项都校验通过后,本次请求才被认为是一次合法请求。</p>
<table border="1" cellpadding="0" cellspacing="0" style="width:807px">
<tbody>
<tr>
<td style="background-color:#ededed; vertical-align:top; width:135px">
<p><strong>校验项</strong></p>
</td>
<td style="background-color:#ededed; vertical-align:top; width:666px">
<p><strong>解释</strong></p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:135px">
<p>重复提交</p>
</td>
<td style="vertical-align:top; width:666px">
<p>AccessKey的请求方式,每个签名只能使用一次,每次请求都会生成新的签名,因此当一个签名已经被使用过一次时,15分钟内相同签名的请求会被提示重复提交。</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:135px">
<p>API版本错误</p>
</td>
<td style="vertical-align:top; width:666px">
<p>目前固定取值2017-01-01。</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:135px">
<p>签名版本错误</p>
</td>
<td style="vertical-align:top; width:666px">
<p>目前固定取值1.0。</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:135px">
<p>签名时效性</p>
</td>
<td style="vertical-align:top; width:666px">
<p>生成的签名必须在15分钟内完成请求,15分钟后签名会失效。</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:135px">
<p>签名一致性</p>
</td>
<td style="vertical-align:top; width:666px">
<p>请求中传入的签名和后端服务计算出来的签名必须一致,否则认为请求是不安全的。</p>
</td>
</tr>
</tbody>
</table>
提交成功!非常感谢您的反馈,我们会继续努力做到更好!