跳到主要内容

签名

token使用HS256算法的JSON Web Token (JWT) 格式,使用secret作为密钥。当三方应用访问文档中台服务时,需要将token作为请求参数传递给文档中台服务。签名的参数需要包含userinfo、meta、openConfig、repoConfig。

当文档中台回调三方应用时也会在Authorization头中传递token。如果请求没有请求体,则签名的内容是docId。

计算签名示例

import java.time.Instant;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

public String createToken(Map<String, Object> payloadClaims) {
try {
String secret = frontSdkConfig.getSecret(); // 文档中台中配置的secret

Algorithm algorithm = Algorithm.HMAC256(secret);
Calendar calendar = Calendar.getInstance();
Instant issuedAt = calendar.toInstant();
calendar.add(Calendar.MINUTE, 120);
Instant expiresAt = calendar.toInstant();

String token = JWT.create()
.withIssuedAt(issuedAt)
.withExpiresAt(expiresAt)
.withPayload(payloadClaims)
.sign(algorithm);
return token;
} catch (Exception e) {
e.printStackTrace();
return "";
}
}

public Map<String, Object> createInitConfig() {
Map<String, Object> config = new HashMap<>();

Map<String, Object> userinfo = new HashMap<>();
userinfo.put("id", "user");
userinfo.put("display_name", "user");
userinfo.put("email", "user@example.com");
config.put("userinfo", userinfo);

Map<String, Object> meta = new HashMap<>();
meta.put("id", "3ff8645465c4324dc47867ca4c3a9fa0");
meta.put("name", "demo.docx");
meta.put("modified_at", "2025-11-18T10:41:52.12Z");
meta.put("created_at", "2025-11-18T10:41:52.12Z");
Map<String, Object> created_by = new HashMap<>();
created_by.put("id", "user");
created_by.put("name", "user");
created_by.put("email", "user@example.com");
meta.put("created_by", created_by);
Map<String, Object> permissions = new HashMap<>();
permissions.put("write", true);
permissions.put("read", true);
permissions.put("download", true);
permissions.put("print", true);
permissions.put("copy", true);
meta.put("permissions", permissions);
meta.put("size", 1024);
config.put("meta", meta);

Map<String, Object> repoConfig = new HashMap<>();
repoConfig.put("id", "3rd-party");
repoConfig.put("downloadUrl", "http://demohost:8080/v2/context/3ff8645465c4324dc47867ca4c3a9fa0/content");
repoConfig.put("uploadUrl", "http://demohost:8080/v2/context/3ff8645465c4324dc47867ca4c3a9fa0/content");
Map<String, String> params = new HashMap<>();
params.put("paramA", "value");
repoConfig.put("params", params);
config.put("repoConfig", repoConfig);

Map<String, String> openConfig = new HashMap<>();
openConfig.put("action", "edit");
config.put("openConfig", openConfig);

config.put("documentServerAddr", "http://luoshuhost:8001");
config.put("token", this.createToken(config));
return config;
}