变更记录


产品版本更新内容更新日期
R202403.001(金蝶AI苍穹V6.0.1)新增了增强型Token认证模式2024年02月21日
R202504.002(金蝶AI苍穹V7.0.8)下架refreshToken接口

2025年04月



1. 简介

1.1 背景介绍

为优化产品体验,进一步提升安全性,金蝶AI-R202403.001(金蝶AI苍穹V6.0)以上版本OpenAPI新增了增强型Token认证模式,支持通过接口获取、验证及失效请求令牌,V6.0版本后新增的第三方应用,AccessToken认证策略卡片默认开启了增强认证,若关闭后,则仍可使用历史方式,通过/api/login.do接口获取access_token。


1.2 注意事项


1.3 优化内容

                  3)认证参数支持加密脱敏,并在打印日志时隐藏敏感信息,防止信息泄露;

                  4)请求令牌access_token只允许在请求头中传递,不允许通过URL参数传递,避免造成资源权限外泄。


1.4 使用场景

在集成项目中,通过API接口进行集成时,需要首先调用getToken接口获取请求令牌,并缓存在调用端;在access_token过期(默认2小时有效)前,调用verifyToken验证access_token的有效性,并获取最新的过期时间。

access_token即将过期时,支持通过refreshToken接口刷新access_token的有效期,从而在不换access_token的情况下继续访问OpenAPI资源。


1.5 接口列表

序号接口名称接口地址说明
1获取access_token令牌/kapi/oauth2/getToken

获取请求令牌access_token,在第三方应用中启用JWT token后还会返回id_token,均可用于访问接口

2

检测令牌有效性/kapi/oauth2/verifyToken 检测access_token有效性及过期时间,检测JWT token(id_token)有效性
3撤回密钥令牌/kapi/oauth2/withdrawToken撤回access_token

开放平台OpenAPI调用流程参考


2 特性详情

2.1 getToken


注意事项:


请求头参数

请求参数必传类型说明
Content-TypeString内容格式,传入application/json


请求Body参数

请求参数必传类型说明
client_idString第三方应用系统编码,即appId
client_secretString第三方应用AccessToken认证密钥,即appSecret
usernameString第三方应用代理用户的用户名
accountIdString数据中心id
languageString语言字串: zh_CN,zh_TW、en_US等。 默认系统默认语言,查询接口会返回对应的多语言文本字段
nonceString

随机数,10分钟内不可重复

timestampString时间戳,当前时间前后5分钟


请求参数示例

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

请求Body参数:
{
    "client_id": "thirdappunittest_003",
    "client_secret": "Abcdrty@1234567890#@2",
    "username":"zhangSan",
    "accountId": "1355633519610561531",
    "language": "zh_CN",
    "nonce": "123",
    "timestamp": "2023-09-08 11:47:00"
}


返回参数

返回参数类型说明
data

- access_tokenString请求令牌,第三方应用调用OpenAPI的凭证
- token_typeString令牌类型,默认为Bearer,即任何持有token的用户都可以访问对应的资源
- refresh_tokenString刷新令牌,使用refresh_token 去刷新获得新的access_token,只能使用1次
- scopeString作用域,用户授权给第三方的权限,默认为API
- expires_inIntaccess_token的有效期,即距离过期的剩余时长(单位:毫秒)
- id_tokenStringJWT(Json Web Token)
- id_token_expires_inIntJWT的有效期,即距离过期的剩余时长(单位:毫秒)
- languageString浏览器接收语言
errorCodeString错误码,成功时为0
messageString错误消息
statusBoolean请求状态,true/false


返回参数示例

{
"data": {
    "access_token":"OPENAPIAUTH_MTMzMTIwNDQ0NTk5NTc5NDQzMl9FZ3h4MXU1Zzd2Qk9kRjR4MzIxQXZKcXU5c2hpbzNCaTRtTGIzbEsyM3JnbmFJUUJEMEltZUt3UURYQmFFdDJIVnc3MWtyaTVUR01ZbTRDUGVETDVSamE2R0F1a2g5SGpVcmwx",
    "token_type": "Bearer",
    "refresh_token": "d367106c-de46-4fc4-9e1a-59cbcfc430d2",
    "scope": "API",
    "expires_in": "7199977",
    "id_token": "OPENAPIAUTH_ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5Sm1hV1FpT2lJeE16UTJOamN6T1NJc0luTjFZaUk2SW10a2FuZDBJaXdpWm5Cb2IyNWxJam9pTVRjeU9UazVPVGs1T1RraUxDSmxhV1FpT2lJeE1UUTNOVFl4TnlJc0ltWjBjblZsYm1GdFpTSTZJa2xGVWxBaUxDSm1iM0puYVdRaU9pSXhJaXdpWm1WdFlXbHNJam9pYVdWeWNFQnJhVzVuWkdWbExtTnZiU0lzSW1semN5STZJbXRrSWl3aWRYTmxjbWxrSWpvaU1UTTBOalkzTXpraUxDSm1ZbWw2Y0dGeWRHNWxjbWxrSWpvaU1DSXNJbVpzWVhOMGJHOW5hVzVwY0NJNklqRTNNaTR5TUM0eE5DNDJOeUlzSW1acGMyRmpkR2wyWldRaU9pSXhJaXdpWm05d1pXNXBaQ0k2SWpWaE1tUmxabU5pWlRSaU1EazFOMlpoTURobU9HTTNNaUlzSW1ac1lYTjBiRzluYVc1MGFXMWxJam9pTWpBeU15MHdPQzB5T1NBd01Eb3dNRG93TUM0d0lpd2labVZ1WVdKc1pTSTZJakVpTENKbWRXbGtJam9pTVRNME5qWTNNemtpTENKMWMyVnlWSGx3WlNJNklqRWlMQ0psZUhBaU9qRTJPVFEyTURReU1UZ3NJbWxoZENJNk1UWTVORFU1TnpBeE9Dd2labWx6Y21WbmFYTjBaV1FpT2lJeElpd2labkJ6ZDNOMGNtRjBaV2Q1YVdRaU9pSTNOakk1TnpjM09UVTNOekl3TURVek56WWlMQ0oxYzJWeWIzQmxibWxrSWpvaU5XRXlaR1ZtWTJKbE5HSXdPVFUzWm1Fd09HWTRZemN5SWl3aWRYTmxjbTVoYldVaU9pSkpSVkpRSW4wLi1ZZEd1cWhIX25Mcm5ibURnQTlfU2FvQkZsTGJWTTJEUmp2cnR4NXZwckk=",
    "id_token_expires_in": "7199977",
    "language": "zh_CN"
        },
    "errorCode": "0",
    "message": "",
    "status": true
}


错误码说明

错误码说明
0请求成功
401不正确的第三方应用编码client_id或client_secret
603请求参数错误



2.2 verifyToken


请求头参数

请求参数必传类型说明
Content-TypeString内容格式,传入application/json


请求Body参数

请求参数必传类型说明
client_idString第三方应用系统编码,即appId
token_type_hintString令牌类型,access_token/refresh_token/id_token
tokenString令牌值
accountIdString数据中心id
nonceString随机数
timestampString时间戳,当前时间前后5分钟


请求参数示例

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

请求Body参数:
{
  "client_id": "thirdappunittest_003",
  "token_type_hint": "access_token",
    "token":"OPENAPIAUTH_MTMzMTIwNDQ0NTk5NTc5NDQzMl9peGdobmxERWluY1FpZDc2R2pjUDcyYlg0UTNwNDhpczZXM01NYTlsTDVhNEU2TFRkT0ZIWTlybUl5SDdvQUJ1ZGFSaGtWU0hGNlNRRTBjMjZ6MkxxQWRjbkNpTzBnd1ZzMW9P",
  "nonce": "1234",
  "timestamp": "2023-09-15 16:14:00",
  "accountId": "1331204445995794432"
}


返回参数

返回参数类型说明
data

- expires_inInt令牌的有效期,即距离过期的剩余时长(单位:毫秒)
- activeBoolean是否有效,true/false
- scopeString作用域,用户授权给第三方的权限,默认为API
errorCodeString错误码,成功时为0
messageString错误消息
statusBoolean请求状态,true/false


返回参数示例

{
    "data": {
    "expires_in": "7133040",
    "active": true,
    "scope": "API"
    },
    "errorCode": "0",
    "message": "",
    "status": true
}


错误码说明

错误码说明
0请求成功
603请求参数错误
612AccessToken verify failed/refresh_token/JWT(id_token) 验证失败:已过期/refresh_token 验证失败:已过期


2.3 withdrawToken


请求头参数

请求参数必传类型说明
Content-TypeString内容格式,传入application/json


请求Body参数

请求参数必传类型说明
client_idString第三方应用系统编码,即appId
client_secretString第三方应用AccessToken认证密钥,即appSecret
token_type_hintString令牌类型,access_token/refresh_token/id_token
tokenString令牌值
accountIdString数据中心id
nonceString随机数
timestampString时间戳,当前时间前后5分钟


请求参数示例

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

请求Body参数:
{
    "client_id": "thirdappunittest_003",
    "client_secret": "Abcdrty@1234567890#@2",
    "token_type_hint": "access_token",
    "token":"OPENAPIAUTH_MTMzMTIwNDQ0NTk5NTc5NDQzMl9peGdobmxERWluY1FpZDc2R2pjUDcyYlg0UTNwNDhpczZXM01NYTlsTDVhNEU2TFRkT0ZIWTlybUl5SDdvQUJ1ZGFSaGtWU0hGNlNRRTBjMjZ6MkxxQWRjbkNpTzBnd1ZzMW9P",
    "nonce": "12345",
    "timestamp": "2023-09-15 16:29:00",
    "accountId": "1331204445995794432"
}


返回参数

返回参数类型说明
data

errorCodeString错误码,成功时为0
messageString错误消息
statusBoolean请求状态,true/false


返回参数示例

{
    "data": true,
    "errorCode": "0",
    "message": "true",
    "status": true
}


错误码说明

错误码说明
0请求成功
401不正确的第三方应用编码client_id或client_secret
603请求参数错误
611撤回失败


3 更多资讯

金蝶AIOpenAPI开发认证指南