一、摘要认证介绍
摘要认证使用摘要代替token的传输,并且采用MD5、SHA之类的不可逆哈希算法对参数摘要。
客户端第一次请求时,通过服务端生成的随机数将放在响应头中发送回客户端,然后客户端通过指定的加密算法将随机数、时间戳和其他用户信息生成摘要。后续客户端在调用请求时,将摘要放在请求头中再次发送给服务器。服务器拿到摘要后,根据请求信息从数据库取出客户端密码进行同样的计算并与得出的摘要进行对比,匹配则身份验证通过。

第三方系统直接调用金蝶AI的OpenAPI的时候,需要经历2步:
生成第三方appId和第三方app的摘要认证加密秘钥;
API调用过程中加入验证信息。
摘要签名不需要像AccessToken认证方式一样分两步获取,可以通过java工具类指定默认算法如sha-256直接生成签名;生成摘要后,后续只需要在请求的参数中带上签名信息就可以完成服务调用。
POST方式:提交的API内容,所有的验证内容在请求体中;
GET方式:提交的API内容,所有的验证内容在url的参数中。
注:生成摘要后,后续只需要在请求的参数中带上签名信息就可以完成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"
}请关注开放平台新特性公告的最新特性