aksk鉴权
在请求接口时,通过accessKeyId和accessKeySecret对请求进行签名,实现对用户身份的验证。其中accessKeyId是访问密钥ID,accessKeySecret是密钥。使用accessKeyId和accessKeySecret进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。
请求时header中会增加如下参数:
|
名称 |
样例 |
说明 |
|
Content-Type |
application/json |
方法 |
|
x-connector-signature-timestamp |
1694145291981 |
时间戳 |
|
x-connector-signature |
****** |
签名,由下列签名算法计算 |
|
x-connector-accesskeyid |
****** |
ak |
签名算法如下:
/**
* 获取aksk签名
*
* @param accessKeyId ak
* @param accessKeySecret sk
* @param timestamp 时间戳
* @param httpMethod GET/POST
* @param url 请求url,不带域名端口,不带参数,以/开头不以/结尾
* @return 签名串
*/
public static String signByAKSK(String accessKeyId, String accessKeySecret, long timestamp, String httpMethod, String url) {
String sign = null;
try {
Charset charset = StandardCharsets.UTF_8;
URI uri = new URI(url);
String path = uri.getPath();
if (StringUtils.endsWith(path, "/")) {
path = StringUtils.removeEnd(path, "/");
}
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec key = new SecretKeySpec(accessKeySecret.getBytes(charset), "HmacSHA256");
mac.init(key);
String signStr = accessKeyId + timestamp + httpMethod.toUpperCase(Locale.ENGLISH) + path;
sign = Base64.getEncoder().encodeToString(mac.doFinal(signStr.getBytes(charset)));
} catch (Exception e) {
log.error("signByAKSK fail.", e);
}
return sign;
}