更新时间:2025-07-21 GMT+08:00
分享

自建应用身份源开放接口

接口说明

自建的OA系统可以集成联营通讯录OpenAPI,实现将OA系统账号、组织架构等信息导入到联营企业中。

接口签名:

自建OA系统每次调用云商店的接口时,需要按规则对请求生成X-MKP-Authorization,并且将X-MKP-Authorization通过URL PARAMS的方式添加到URL上,云商店在接收到请求后需要同样的规则对请求体进行重新计算X-MKP-Authorization,相比较且完全相同即为校验通过,通过URL PARAMS传递的参数有:

Headers请求参数:

参数

必选

参数类型

描述

X-MKP-Authorization

M

String(255)

签名信息

X-MKP-Authorization字段生成方式:

字段名

是否必选

备注

algorithm

M

签名算法,目前固定为:HMAC-SHA256

appid

M

由自建应用自动生成的Client ID

timestamp

M

时间戳,UTC时间,格式:YYYYMMDDhhmmss。

nonce

M

32位随机字符,包括字母和数字

signature

M

由字段0到3,按照顺序以英文分号(;)拼接,

例如:

algorithm=HMAC-SHA256;appid=0001;timestamp=20231225121200;nonce=11111111222222223333333344444444; signature=

使用创建自建应用生成的ClientSecret,做HMAC-SHA256签名,并做Base64编码,得到Base64编码字符作为signature的值。

请求签名示例:

StringJoiner stringJoiner = new StringJoiner(";");
        stringJoiner.add("algorithm=" + "HMAC-SHA256")
            .add("appid=" + client_id)
            .add("timestamp="
                + LocalDateTime.now(ZoneId.of("UTC")).format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")))
            .add("nonce=XXXX...XXX");
String contentToBeSign = stringJoiner.toString();
byte[] data;
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            md.update(contentToBeSign.getBytes(StandardCharsets.UTF_8));
            data = md.digest();
        } catch (NoSuchAlgorithmException exception) {
            throw new IllegalArgumentException();
        }
 
        byte[] signingKey = Hex.decode(client_secret);
        byte[] signatureByte;
        try {
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(signingKey, "HmacSHA256"));
            signatureByte = mac.doFinal(data);
        } catch (InvalidKeyException | NoSuchAlgorithmException exception) {
            throw new IllegalArgumentException();
        }
String signature = Base64.getEncoder().encodeToString(signatureByte);
String X-MKP-Authorization = contentToBeSign + ";signature=" + signature;

相关文档