签名机制

<p>用户在HTTP请求中添加签名(signature)信息,平安金融云才可以对请求进行身份验证。</p> <p>接口的鉴权主要鉴定用户请求的URL是否在传输过程中被篡改过,</p> <ul> <li>若签名校验通过,则认为请求没有被篡改,后台会将请求转发到具体的服务。</li> <li>若签名校验失败,则被认为由于一些原因,导致当前请求是不安全的,例如用户请求的URL被篡改过,用户请求过期等,后台将拒绝提供服务。</li> </ul> <p>在平安金融云门户注册主用户或创建子用户后,可以为每个用户生成一对AccessKey,AccessKey由AccessKeyId与AccessKeySecret组成。</p> <ul> <li>通过AccessKeyId,可以在后台查出唯一对应的用户的详细信息;</li> <li>AccessKeySecret则作为秘钥,用于对请求进行签名。AccessKeySecret需要用户严格保密,来防止被盗用后用于冒充用户进行签名。</li> </ul> <p><span style="font-size:16px"><strong>签名步骤</strong></span></p> <p>构造规范化的请求字符串</p> <p>1、 按照字母升序,对参数名称进行排序。</p> <p>排序的参数包括action参数、公共参数及调用接口所需的业务请求参数,需要对每个请求参数的名称和值采用UTF-8字符集进行URL编码,并将编码后的字符串中&lsquo;+&rsquo;替换成&lsquo;%20&rsquo;、&lsquo;*&rsquo;替换成&lsquo;%2A&rsquo;、&lsquo;%7E&rsquo;替换成&lsquo;~&rsquo;、&lsquo;:&rsquo;替换成&lsquo;%3A&rsquo;,即java代码为:</p> <pre> <code>String encodedParamValue = URLEncoder.encode(paramValue, "UTF-8") .replace("+", "%20") .replace("*", "%2A") .replace("%7E", "~") .replace(":", "%3A");</code></pre> <p>2、 将参数名paramName转化为小写,编码后的参数值encodedParamValue转化为小写,最后将转为小写后的paramName按照字符升序排序,升序后组装请求字符串生成待签名字符串stringToSign。</p> <p>3、 将上面用于签名的字符串stringToSign计算签名HMAC值。注意:计算签名时使用的Key就是用户持有的AccessKeySecret,使用的哈希算法是SHA1,即HmacSHA1(stringToSign)。然后按照Base64编码规则把上面的HMAC值编码成字符串,即得到签名值(signature)。将得到的签名值作为signature参数添加到请求参数中,即完成对请求签名的过程。</p> <p>4、 拼接包含signature参数所有请求参数,得到规范化的请求字符串,并使用该请求字符串提交给KMS服务端进行接口请求。</p> <p>示例(以EnableKey为例):</p> <p>假如paramsString值为:accessKeyId=testId&amp;action=EnableKey&amp;keyId=keyId</p> <p>&amp;signatureMethod=HMAC-SHA1&amp;signatureNonce=1542333462075&amp;signatureVersion=1.0</p> <p>&amp;timestamp=1542333462075&amp;version=2017-01-01</p> <p>则stringToSign应该是:accesskeyid=testid&amp;action=enablekey&amp;keyid=keyid</p> <p>&amp;signaturemethod=hmac-sha1&amp;signaturenonce=1542333462075&amp;signatureversion=1.0</p> <p>&amp;timestamp=1542333462075&amp;version=2017-01-01</p> <p>假如使用的AccessKeyId对应的AccessKeySecret是testsecret,则计算得到的签名值是:caPjvsMXfd6oglEkahdq4Jo0yVA=</p> <p>签名后的请求URL为(注意增加了signature参数):</p> <pre> <code>https://kms-cn-shanghai.ocftcloud.com/?action=EnableKey &amp;keyId=&lt;keyid&gt; &amp;timestamp=&lt;timestamp&gt; &amp;signatureMethod=HMAC-SHA1 &amp;signatureNonce=&lt;signaturenonce&gt; &amp;accessKeyId=&lt;accesskeyid&gt; &amp;signatureVersion=1.0 &amp;signature=&lt;signature value&gt; &amp;version=2017-01-01</code></pre>
以上内容是否解决了您的问题?
请补全提交信息!
联系我们

电话咨询

400-151-8800

邮件咨询

fincloud@ocft.com

在线客服

工单支持

解决云产品相关技术问题