一、摘要认证介绍

        摘要认证使用摘要代替token的传输,并且采用MD5、SHA之类的不可逆哈希算法对参数摘要。

        客户端第一次请求时,通过服务端生成的随机数将放在响应头中发送回客户端,然后客户端通过指定的加密算法将随机数、时间戳和其他用户信息生成摘要。后续客户端在调用请求时,将摘要放在请求头中再次发送给服务器。服务器拿到摘要后,根据请求信息从数据库取出客户端密码进行同样的计算并与得出的摘要进行对比,匹配则身份验证通过。


上传图片



二、认证流程

        第三方系统直接调用金蝶AI的OpenAPI的时候,需要经历2步:

  1.   生成第三方appId和第三方app的摘要认证加密秘钥;

  2.   API调用过程中加入验证信息。

        摘要签名不需要像AccessToken认证方式一样分两步获取,可以通过java工具类指定默认算法如sha-256直接生成签名;生成摘要后,后续只需要在请求的参数中带上签名信息就可以完成服务调用。

    注:生成摘要后,后续只需要在请求的参数中带上签名信息就可以完成API调用。摘要认证详细方法和demo见附件。


三、调用接口示例:

1)GET API 实例


请求示例

URL:http://{{localhost}}/kapi/sys/isc_demo_basedata_1/query?x-acgw-identity={第三方应用身份标识}&appId=TEST×tamp=2021-08-18 14:19:08&signatureNonce=iksiertoidkwek;oitdwudysletwsuej&signature=32beeebfc277817a80b0
1d5787242c51ca5295f5edcf2eb9371ff367f8b487a5¶meters=select&user=17299999999&usertype=Mobile&accountId=1173910536060928000


请求Header参数:
Content-Type=application/json

请求结果:
{
   "success": "true",
   "data": {
       "count": 1,
       "header": [
           {
               "name": "name",
               "caption": "名称",
               "type": "String"
           },
           {
               "name": "number",
               "caption": "编码",
               "type": "String"
           }
       ],
       "rows": [
           [
               "123asd",
               "123asd"
           ]
       ]
   }
}



请求参数

请求参数

必传

类型

字段说明

x-acgw-identity

string

第三方应用系统身份标识(认证凭证面板获取)

appId

string

第三方appId(认证凭证面板获取)

timestamp

string

当前时间,和服务器时间相差10分钟就为无效请求,目前格式为yyyy-MM-dd HH:mm:ss,以后为时间戳

signatureNonce

string

访问随机数,最好32位uuid,如果随机数已经访问过,则再次访问无效

signature

string

用SHA-256算法和摘要加密认证密钥key对query的拼接参数(如:tesetA=tt&testB=tt2+timestamp+ signatureNonce进行摘要后的结果。公式:HMACSHA256(query的拼接参数+timestamp+signatureNonce,key)

parameters

string

参与摘要的参数列表,多个参数用“,”隔开

user

string

金蝶云或云之家的用户名

usertype

string

用户类型:Mobile: 标识为手机,默认为手机

Email:标识为email

UserName:标识为用户名

如果没有参数,也要加一个默认参数 test=tt来完成认证数据。


2)POST API 实例


请求示例

URL:http://{{localhost}}/kapi/sys/pm_purorderbill/save

请求Header参数:
  x-acgw-identity={第三方应用身份标识}
  appId=test
  signature=32beeebfc277817a80b01d5787242c51ca5295f5edcf2eb9371ff367f8b487a5
  timestamp=2020-08-19 15:31:59
  signatureNonce=iksiertoidkwek;oitdwudysletwsues
  user=130****2580
  usertype= Mobile
  accountId=1173910536060928000 

请求Body参数:
{
    "data": {
        "number": "cugQ",
        "name": "cugQ",
        "alias_name": "cugQ"
    }
}

请求结果:
{
   "data": {
       "success": true,
       "needSign": false,
       "needWfAssignPersons": false,
       "cancelWriteLog": true,
       "showMessage": true,
       "billCount": 1,
       "successPkIds": [
           1226640481962735616
       ],
       "billNos": {
           "1226640481962735616": "cugQ"
       },
       "validateResult": {
           "validateErrors": [],
           "success": true,
           "message": "",
           "errorPkIds": [],
           "errorDataIndexs": []
       },
       "runSecond": 0,
       "allErrorOrValidateInfo": [],
       "allErrorInfo": []
   },
   "success": true,
   "errorCode": "success",
   "message": null
}


请求参数


请求参数

必传

类型

字段说明

x-acgw-identity

string

第三方应用系统身份标识(认证凭证面板获取)

appId

string

第三方appId(认证凭证面板获取)

timestamp

string

当前时间,和服务器时间相差10分钟就为无效请求,目前格式为yyyy-mm-dd hh:mm:ss,以后为时间戳

signatureNonce

string

访问随机数,最好32位uuid,如果随机数已经访问过,则再次访问无效

signature

string

用SHA-256算法和摘要加密认证密钥key对body+timestamp+ signatureNonce进行摘要后的结果。公式:HMACSHA256(body+timestamp+signatureNonce,key)

user

string

金蝶云或云之家的用户名

usertype

string

用户类型:Mobile: 标识为手机,默认为手机

Email:标识为email

UserName:标识为用户名

如果内容为空,则在body中输入固定值,如:

{    
    "testName": "test"                                           
}

四、更多资讯

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

金蝶AIOpenAPI开发认证指南



摘要认证开发demo.rar