接入说明

<p>平安云提供的所有API接口支持HTTP或者HTTPS请求,允许GET和POST两种请求方法,部分接口不允许GET请求。</p> <p>API URL请求需要使用AccessKey进行签名及URL编码。</p> <p><span style="font-size:16px"><strong>1. 请求结构</strong></span></p> <p>平安云支持基于URL发起的HTTP/HTTPS GET请求,请求参数需要包含在URL中,以下为示例:</p> <p>https://api.yun.pingan.com/api/v1?Action=XXXX&amp;&lt; API参数&gt;&amp;&lt;公共请求参数&gt;</p> <p>&Yuml;&nbsp;&nbsp; https: 指定了请求通信协议。</p> <p>&Yuml;&nbsp;&nbsp; api.yun.pingan.com: 接口的接入网关(Endpoint)。</p> <p>&Yuml;&nbsp;&nbsp; /api/v1: 代表API服务的版本为v1。</p> <p>&Yuml;&nbsp;&nbsp; Action=XXXX: 指定了要调用的具体API。</p> <p>&Yuml;&nbsp;&nbsp; &lt; API参数&gt;:是接口的业务请求参数。</p> <p>&Yuml;&nbsp;&nbsp; &lt;公共请求参数&gt;: 是平安云约定的公共参数,与实际业务无关。</p> <p>(1)通信协议</p> <p>支持HTTP或HTTPS协议请求通信。为了获得更高的安全性,推荐您使用HTTPS协议发送请求。涉及敏感数据时,如用户密码和SSH密钥对,推荐使用HTTPS协议。</p> <p>(2)接入网关</p> <p>当前访问需要接入平安云中国大陆的API服务时,请使用:https://api.yun.pingan.com</p> <p>(3)请求参数</p> <p>平安云提供命令模式的API接口,通过Action参数指定目标操作,例如Action=RunInstance。还需要指定接口的其他参数以及公共请求参数,例如:</p> <p>https://api.yun.pingan.com/api/v1?Action=RunInstance&amp;&lt;公共请求参数&gt;。</p> <p>平安云API约定请求及返回结果都使用UTF-8字符集编码。</p> <p>&nbsp;</p> <p><span style="font-size:16px"><strong>2. 公共参数</strong></span></p> <p>(1)公共请求参数</p> <table border="0" cellpadding="0" cellspacing="0" style="width:0px"> <tbody> <tr> <td style="background-color:#ededed"> <p><strong>参数名称</strong></p> </td> <td style="background-color:#ededed"> <p><strong>参数类型</strong></p> </td> <td style="background-color:#ededed"> <p><strong>是否必须</strong></p> </td> <td style="background-color:#ededed"> <p><strong>参数描述</strong></p> </td> <td style="background-color:#ededed"> <p><strong>格式/备注</strong></p> </td> </tr> <tr> <td> <p>accessKeyId</p> </td> <td> <p>String</p> </td> <td> <p>TRUE</p> </td> <td> <p>Access Key Id</p> </td> <td> <p> </p> </td> </tr> <tr> <td> <p>signatureMethod</p> </td> <td> <p>String</p> </td> <td> <p>TRUE</p> </td> <td> <p>签名方法</p> </td> <td> <p>HMAC-SHA1</p> </td> </tr> <tr> <td> <p>signatureNonce</p> </td> <td> <p>String</p> </td> <td> <p>TRUE</p> </td> <td> <p>请求随机数</p> </td> <td> <p> </p> </td> </tr> <tr> <td> <p>signatureVersion</p> </td> <td> <p>String</p> </td> <td> <p>TRUE</p> </td> <td> <p>签名版本</p> </td> <td> <p>1</p> </td> </tr> <tr> <td> <p>timestamp</p> </td> <td> <p>String</p> </td> <td> <p>TRUE</p> </td> <td> <p>请求时间戳</p> </td> <td> <p> </p> </td> </tr> <tr> <td> <p>version</p> </td> <td> <p>String</p> </td> <td> <p>TRUE</p> </td> <td> <p>Api版本</p> </td> <td> <p>2017-1-1</p> </td> </tr> <tr> <td> <p>signature</p> </td> <td> <p>String</p> </td> <td> <p>TRUE</p> </td> <td> <p>请求签名</p> </td> <td> <p> </p> </td> </tr> <tr> <td> <p>regionId</p> </td> <td> <p>String</p> </td> <td> <p>TRUE</p> </td> <td> <p>区域id</p> </td> <td> <p> </p> </td> </tr> </tbody> </table> <p>&nbsp;</p> <p>(2)公共返回参数</p> <table border="0" cellpadding="0" cellspacing="0" style="width:0px"> <tbody> <tr> <td style="background-color:#ededed"> <p><strong>参数名称</strong></p> </td> <td style="background-color:#ededed"> <p><strong>参数类型</strong></p> </td> <td style="background-color:#ededed"> <p><strong>参数描述</strong></p> </td> <td style="background-color:#ededed"> <p><strong>格式/备注</strong></p> </td> </tr> <tr> <td> <p>RequestId</p> </td> <td> <p>String</p> </td> <td> <p>请求ID</p> </td> <td> <p>全局唯一的请求ID</p> </td> </tr> <tr> <td> <p>Code</p> </td> <td> <p>String</p> </td> <td> <p>错误码</p> </td> <td> <p>请求成功时值为空</p> </td> </tr> <tr> <td> <p>ErrorMessage</p> </td> <td> <p>String</p> </td> <td> <p>错误原因</p> </td> <td> <p>请求成功时值为空</p> </td> </tr> <tr> <td> <p>Success</p> </td> <td> <p>Boolean</p> </td> <td> <p>请求结果</p> </td> <td> <p>true为成功,false为失败</p> </td> </tr> <tr> <td> <p>Data</p> </td> <td> <p>Object</p> </td> <td> <p>不同API请求需要返回的数据,</p> </td> <td> <p>若API不需要返回相关的数据,该值为空</p> </td> </tr> </tbody> </table> <p>注:返回数据为JSON格式</p> <p>&nbsp;</p> <p><span style="font-size:16px"><strong>3. 签名机制</strong></span></p> <p>(1)签名机制简介</p> <p>通过AccessKey的方式访问后台接口,主要是通过签名校验的方式,鉴定用户请求的url是否在传输过程中被篡改过,若签名校验通过,则认为请求没有被篡改过,后台会将请求转发到具体的服务。若签名校验失败,则被认为由于一些原因,导致当前请求是不安全的,例如用户请求的url被篡改过,用户请求过期等,后台将拒绝提供服务。在云门户注册主用户或创建子用户后,可以为每个用户生成一对AccessKey,AccessKey由AccessKeyId与AccessKeySecret组成。通过AccessKeyId,可以在后台查出唯一对应的用户的详细信息;AccessKeySecret则作为秘钥,用于对请求进行签名。AccessKeySecret需要用户严格保密,来防止被盗用后用于冒充用户进行签名。</p> <p>目前,使用签名校验的方式访问后台接口,请求的url参数由以下几个部分组成:</p> <table border="0" cellpadding="0" cellspacing="0" style="width:0px"> <tbody> <tr> <td style="background-color:#ededed"> <p><strong>参数名称</strong></p> </td> <td style="background-color:#ededed"> <p><strong>参数是否参与计算签名</strong></p> </td> </tr> <tr> <td> <p>accessKeyId</p> </td> <td> <p>是</p> </td> </tr> <tr> <td> <p>signature</p> </td> <td> <p>否</p> </td> </tr> <tr> <td> <p>signatureMethod</p> </td> <td> <p>是</p> </td> </tr> <tr> <td> <p>signatureNonce</p> </td> <td> <p>是</p> </td> </tr> <tr> <td> <p>signatureVersion</p> </td> <td> <p>是</p> </td> </tr> <tr> <td> <p>timestamp</p> </td> <td> <p>是</p> </td> </tr> <tr> <td> <p>version</p> </td> <td> <p>是</p> </td> </tr> <tr> <td> <p>具体业务接口参数</p> </td> <td> <p>是</p> </td> </tr> </tbody> </table> <p>&nbsp;</p> <p>(2)签名生成过程</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&amp;action=ListZones&amp;regionId=Region-southChina&amp;signatureMethod=HMAC-SHA1&amp;signatureNonce=3378010751426913252&amp;signatureVersion=1.0&amp;timestamp=1534159280463&amp;version=2017-01-01。</p> <p>2)然后对请求参数,利用HmacSHA1算法进行签名计算,计算签名需要使用AccessKeySecret,用户的AccessKeySecret是存储在客户端的,因此用户可以自行设置,利用AccessKeySecret和其他签名过程中必须的参数,可以计算得到最终的签名signature的值。通常,我们会通过SDK等方式,在用户端集成或提供生成签名或生成请求url的便捷方法。</p> <p>3)客户端利用签名和其他请求参数,生成请求url,开始请求服务端。</p> <p>&nbsp;</p> <p><span style="font-size:16px"><strong>4. 访问验证</strong></span></p> <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&amp;signature</p> <p>(1)首先后端会取出所有请求参数和请求参数值,但会将signature参数排除,然后对排除signanture参数的其他参数,按照参数名称,以字母序进行排序。</p> <p>(2)后端会根据AccessKeyId,在数据库中查找到AccessKeySecret,然后利用AccessKeySecret,对已经进行过排序的请求参数,进行签名的计算</p> <p>(3)后端得到签名计算结果后,与请求传入的签名结果进行比较,若签名结果一致,则认为请求合法,将请求转发到具体服务,否则拒绝服务。</p> <p>签名校验过程中,将依次对下面几个条件进行单独校验(见下表),任何一个环节校验失败,请求都将不会被执行,只有所有校验项都校验通过后,本次请求才被认为是一次合法请求。</p> <table border="0" cellpadding="0" cellspacing="0" style="width:0px"> <tbody> <tr> <td style="background-color:#ededed"> <p><strong>校验项</strong></p> </td> <td style="background-color:#ededed"> <p><strong>解释</strong></p> </td> </tr> <tr> <td> <p>重复提交</p> </td> <td> <p>AccessKey的请求方式,每个签名只能使用一次,每次请求都会生成新的签名,因此当一个签名已经被使用过一次时,15分钟内相同签名的请求会被提示重复提交</p> </td> </tr> <tr> <td> <p>API版本错误</p> </td> <td> <p>目前固定取值2017-01-01</p> </td> </tr> <tr> <td> <p>签名版本错误</p> </td> <td> <p>目前固定取值1.0</p> </td> </tr> <tr> <td> <p>签名时效性</p> </td> <td> <p>生成的签名必须在15分钟内完成请求,15分钟后签名会失效</p> </td> </tr> <tr> <td> <p>签名一致性</p> </td> <td> <p>请求中传入的签名和后端服务计算出来的签名必须一致,否则认为请求是不安全的</p> </td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> </tr> </tbody> </table> <p>&nbsp;</p> <p><span style="font-size:16px"><strong>5. 返回结果</strong></span></p> <p>平安云API接口返回结果主要是JSON 格式。更多详情,请参阅公共参数。为了便于查看和美观,API 文档返回示例均有换行和缩进等处理,实际返回结果无换行和缩进处理。</p> <p><strong>&nbsp;</strong></p>
以上内容是否解决了您的问题?
请补全提交信息!
咨询·建议

电话咨询 - 7x24 小时

400-151-8800

邮件咨询

cloud@pingan.com

在线客服

7x24 小时,急速解答

工单支持

解决云产品相关技术问题