签名认证是目前第三方系统和金蝶AI苍穹安全性最高的认证方式,采用双向签名认证+加密/解密的模式,解决了第三方系统和金蝶AI苍穹安全高效的接口交互,支持接口参数防篡改,数据完整性和隐私安全性,可支持金融交易,海关等高安全性应用场景。
备注:金蝶AI苍穹版本COSMICV5.0.011开始支持
1、配置签名认证相关参数;
2、编写签名认证相关签名和加密/解密代码;
3、编写业务接口处理代码;
4、调试接口。如下图所示,选择签名策略,支持SHA256签名,设置认证密钥(appSecret), 配置代理用户,并复制Secret key。然后配置加密API,如果全部API都加密直接打开加密全部API开关,否则就配置需要加密的API,下载平台公钥证书。


注意:接口只支持POST请求
第三方系统产生随机会话密钥randomKey, 通过randomKey把data域通过加密策略加密,同时将会话密钥randomKey通过平台公钥RSA加密,放入字段dgtlEnvlp中;
第三方系统通过SHA256将随机数,时间戳及整个body报文进行加签后发请求到金蝶AI苍穹OpenAPI;
金蝶AI苍穹开放平台通过openApiSign(SecretKey)基本验证后,获取代理用户,第三方应用ID及数据中心,通过后进行验证签名,验证签名过程中,要检查随机数是否合法,检查时间戳时间合法及参数的有效性;
金蝶AI苍穹OpenAPI验证签名通过后解密敏感数据,还原原来的数据,进行API接口处理,查询或保存等;
金蝶AI苍穹OpenAPI产生随机数,加密返回结果数据;
金蝶AI苍穹OpenAPI对返回结果数据进行SHA256签名;
第三方系统接收到返回结果进行验证签名,通过后下一步;
第三方系统解密返回的结果,进行相关业务处理。
URL: http://{{localhost}}/kapi/v2/kdtest/open/openapi_unittest/findOrders
请求方式:POST
请求Header参数:
Content-Type=application/json
x-acgw-Identity={第三方应用身份标识}
OpenApiAuth=5
openApiSign=UlZqZWxjZWZJRk5BbjZnMGF1jYWZZeFNPOUxwND06MTMzMTIwNDQ0NTk5NTc5NDQzMg==
请求Body参数:
{
"dgtlEnvlp": "6F56001A8479097414D4F3137C25D0A72EA7D3D9D089AF0498CC1CF9CD90C8D583C0135049B64764AEE26C30DA1C1295F5F21C80F3DC901293A8C64624B66399B95255E8932C3D8F9E65F1FE6AD091948DB8BED453E80B8A4CF2E32E0227E9AEC96B3BE5B57C457589B7578EBADC6EBB4F5ABDD98B6614E3C741AA691FF0259D",
"encryptData": "AAAADKPWJMKRjHiwR67fLSUUfkwcZo0XJQeSEGExBDp1jDCqGl+FB8GNLUQXzLsIdP6kbkyCNTPpYLdu4x5f7EJgPbzJ7fLWN+Cs44OJMKeHapFOgKM=",
"signature": "712f5d468ecb13c8b8fc24118d23bc541a93d2f3d6b5f998af8952bbc862387c",
"signatureNonce": "0f8cf008-9095-4ce7-9600-e28e564aaae7",
"timestamp": "2022-10-19 15:26:33"
}
请求结果:
{
"accountId": "1355633519610561536",
"authType": "5",
"data": {
"data": null,
"errorCode": "0",
"message": null,
"status": true
},
"dgtlEnvlp": "0EEFE62AA75CF03638568D30AC5CC165637529632E0E2A9CB1C77E28645D8DD7555DBB52EA78758798A366D375E1E46D314C5B7D41F461757793FCECEE948D41428F69D1A304110FE469DCA6BA032DA599F244F11408915BB76EE7275CE3595578E1FA6E4CF0A96FE3B6642631D2B0DCD5090F9C762D16032138AD4C198271AF",
"encryptData": "AAAADIULnyBUVP/qDzgdateRk6LdD7puKpNdXSNYEHtnsYxZUwucf5Jc8MrbEMDvqV8dIr/uKH3jTvsfQXMZuzI88JaX+s9KfxMYgL5382dDPigkaASyCbtRJkm4LTyIkd96JmJAzeZQYOSsk9OFfJFfpT0rFbpNRHcs5t5sPfB7iI91UtjRCg==",
"signature": "1af6b267b0c74801996cb7a6b621eb44a6a95fc496128373ed3f8bfd5d2dca00",
"signatureNonce": "5bfb355d-6966-4289-935a-17d64fa86994",
"thirdId": "1520516744903424000",
"timestamp": "2022-10-19 15:26:34",
"url": "/kapi/v2/kdtest/open/openapi_unittest/findOrders"
}请求Header参数
参数名 | 类型 | 必传 | 字段说明 |
Content-Type | string | 是 | application/json |
OpenApiAuth | string | 是 | 认证类型,”1“-AccessToken认证,”2“-摘要认证,”3“-JWT认证,”4“-基本认证,”5“-签名认证 |
x-acgw-identity | string | 是 | 应用身份标识,第三方应用启用后自动生成 |
openApiSign | string | 是 | 签名认证策略卡片中的SecretKey |
请求Body参数
参数名 | 类型 | 必传 | 字段说明 |
dgtlEnvlp | string | 是 | 随机会话密钥,通过平台公钥加密后的字符串 |
encryptData | string | 是 | 通过随机会议加密,采用加密策略加密后的字符串 |
signatureNonce | string | 是 | 访问随机数,最好32位uuid,如果随机数已经访问过,则再次访问无效 |
timestamp | string | 是 | 当前时间,和服务器时间相差10分钟就为无效请求,目前格式为yyyy-MM-dd HH:mm:ss,以后为时间戳 |
signature | string | 是 | 用SHA-256算法和认证密钥key对body参数和timestamp,signatureNonce进行摘要后的结果。公式:HMACSHA256(body参数+timestamp+signatureNonce,key) |
body参数为请求API接口的参数,body全部参数参与签名。
返回参数:
参数名 | 类型 | 字段说明 |
accountId | string | 数据中心ID |
thirdId | string | 第三方应用ID |
dgtlEnvlp | string | 随机会话密钥,通过平台私钥加密后的字符串 |
encryptData | string | 通过随机会议加密,采用加密策略加密后的字符串 |
signatureNonce | string | 访问随机数,最好32位uuid,如果随机数已经访问过,则再次访问无效 |
timestamp | string | 当前时间,和服务器时间相差10分钟就为无效请求,目前格式为yyyy-MM-dd HH:mm:ss,以后为时间戳 |
signature | string | 用SHA-256算法和认证密钥key对body参数和timestamp, signatureNonce进行摘要后的结果。公式:HMACSHA256(body参数+timestamp+signatureNonce,key) |
请关注开放平台新特性公告的最新特性