本节主要给出获取令牌接口的请求参数和返回参数,并对请求参数中secret
的计算逻辑进行说明。
基本信息
功能说明:租户通过签名验证接入AK,获取访问令牌
Content-Type:
application/json;charset=UTF-8
Http Method:
POST
Request Path:
/api/contract/shakeHand
请求参数
参数名 | 必选 | 类型 | 说明 |
accessId | 是 | string | 租户AK ID |
time | 是 | string | 签名时戳,毫秒单位的时间值 |
secret | 是 | string | 签名数据,16进制编码字符串,签名内容是accessId+time,具体说明参见下方secret计算逻辑。 |
返回参数
参数名 | 类型 | 说明 |
success | boolean | 是否成功 |
code | string | 错误码 |
data | string | - 成功:访问令牌 - 失败:提示信息 |
secret计算逻辑
完整流程
拼接签名内容。
将
accessId
和当前时间戳
拼接成字符串,作为签名内容。示例如下:accessId = "8cf380ba" 当前时间戳 = "1755684845287" 签名内容 = "8cf380ba1755684845287"
加载私钥(RSA算法的)。
从文件中加载并解码私钥,然后生成私钥对象。示例如下:
byte[] bytesPrivateBase64 = ...; // 私钥文件的内容(去掉文件中的注释行,例如:`-----BEGIN RSA PRIVATE KEY-----` 和 `-----END RSA PRIVATE KEY-----`,只保留中间的密钥内容) byte[] bytesPrivate = Base64.decode(bytesPrivateBase64); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytesPrivate); KeyFactory keyFactory = null; KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
生成签名。
使用
SHA256withRSA
算法对签名内容进行签名。示例如下:Signature signature = Signature.getInstance("Sha256WithRSA"); signature.initSign(privateKey); signature.update(plain.getBytes("UTF-8")); byte[] signed = signature.sign();
转换签名。
将签名结果转换为十六进制字符串,最终生成的
secret
参数即为请求的签名值。示例如下:String secret = new String(Hex.encode(signed));
完整示例代码
// 1. 拼接签名内容
String plain = accessId + currentTimestamp; // 例如:"8cf380ba1755684845287"
// 2. 加载私钥
byte[] bytesPrivateBase64 = ...; // 私钥文件内容
byte[] bytesPrivate = Base64.decode(bytesPrivateBase64);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytesPrivate);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
// 3. 初始化签名器
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(plain.getBytes("UTF-8"));
// 4. 生成签名
byte[] signed = signature.sign();
// 5. 转换为十六进制字符串
String secret = new String(Hex.encode(signed));
注意事项
类别 | 注意事项 |
时间戳 | 确保时间戳与服务器时间同步,避免因时间偏差导致签名验证失败。 |
私钥文件 | 私钥文件必须安全存储,避免泄露。 |
编码 | 确保签名内容的编码格式(如 UTF-8)与签名生成时一致。 |
签名算法 | 使用 |
该文章对您有帮助吗?