一、签名认证介绍

        签名认证是目前第三方系统和金蝶AI苍穹安全性最高的认证方式,采用双向签名认证+加密/解密的模式,解决了第三方系统和金蝶AI苍穹安全高效的接口交互,支持接口参数防篡改,数据完整性和隐私安全性,可支持金融交易,海关等高安全性应用场景。

        备注:金蝶AI苍穹版本COSMICV5.0.011开始支持


二、签名认证流程: 

1、配置签名认证相关参数;
2、编写签名认证相关签名和加密/解密代码;
3、编写业务接口处理代码;
4、调试接口。


1)配置第三方应用的签名认证,获取关键参数

如下图所示,选择签名策略,支持SHA256签名,设置认证密钥(appSecret), 配置代理用户,并复制Secret key。然后配置加密API,如果全部API都加密直接打开加密全部API开关,否则就配置需要加密的API,下载平台公钥证书。


注意:接口只支持POST请求

2)签名认证过程

  1. 第三方系统产生随机会话密钥randomKey, 通过randomKey把data域通过加密策略加密,同时将会话密钥randomKey通过平台公钥RSA加密,放入字段dgtlEnvlp中;

  2. 第三方系统通过SHA256将随机数,时间戳及整个body报文进行加签后发请求到金蝶AI苍穹OpenAPI;

  3. 金蝶AI苍穹开放平台通过openApiSign(SecretKey)基本验证后,获取代理用户,第三方应用ID及数据中心,通过后进行验证签名,验证签名过程中,要检查随机数是否合法,检查时间戳时间合法及参数的有效性;

  4. 金蝶AI苍穹OpenAPI验证签名通过后解密敏感数据,还原原来的数据,进行API接口处理,查询或保存等;

  5. 金蝶AI苍穹OpenAPI产生随机数,加密返回结果数据;

  6. 金蝶AI苍穹OpenAPI对返回结果数据进行SHA256签名;

  7. 第三方系统接收到返回结果进行验证签名,通过后下一步;

  8. 第三方系统解密返回的结果,进行相关业务处理。

3)请求示例

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)


三、 更多资讯

请关注开放平台新特性公告的最新特性

金蝶AIOpenAPI开发认证指南