3rd auth
获取访问密钥
签名规则
认证请求相关参数
名称
类型
是否必选
描述
accessSign参数生成规则
2
3
请求接口方式
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.TreeMap;
// 生成签名的方法
public static String generateSignature(String accessKeyId, String accessTimestamp, String requestId, String appId, String accessKeySecret) throws NoSuchAlgorithmException, InvalidKeyException {
// 步骤 1:组织认证参数
Map<String, String> params = new TreeMap<>();
params.put("accessKeyId", accessKeyId);
params.put("accessTimestamp", accessTimestamp);
params.put("requestId", requestId);
params.put("appId", appId);
// 步骤 2:按 key 升序排列,TreeMap 会自动按 key 排序
StringBuilder joinedParams = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
if (joinedParams.length() > 0) {
joinedParams.append("&");
}
joinedParams.append(entry.getKey().toLowerCase()).append("=").append(entry.getValue());
}
// 步骤 3:拼接 key=value,TreeMap 已经排序好,直接拼接即可
String dataToSign = joinedParams.toString();
// 步骤 4:计算 HmacMD5 签名
Mac hmac = Mac.getInstance("HmacMD5");
SecretKeySpec secretKeySpec = new SecretKeySpec(accessKeySecret.getBytes(StandardCharsets.UTF_8), "HmacMD5");
hmac.init(secretKeySpec);
byte[] digest = hmac.doFinal(dataToSign.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
}Last updated