更新时间:2025-09-22 10:04:18
以下是生成鉴权凭证(Token)的两个简单示例:
Python可运行示例
在提供示例代码中将YOUR_ACCESS_KEY、YOUR_ACCESS_KEY_SECRET和YOUR_REQUEST_BODY替换为您的实际值。更新占位符后运行代码,将会输出Token值
import hashlib
import hmac
import base64
import urllib
def build_signing_str(path, query, body):
connector = '\n'
signing_str = path
if query:
signing_str += '?' + query
signing_str += connector
if body:
signing_str += body
return signing_str
def get_signature_hmac_sha1(data, key):
hmac_sha1 = hmac.new(key.encode(), data.encode(), hashlib.sha1)
return hmac_sha1.hexdigest()
def url_safe_encode_bytes(src):
b64 = base64.urlsafe_b64encode(src.encode())
return b64.decode()
def generate_access_token(accessKey, encodeSign):
return "{}:{}".format(accessKey, encodeSign)
# 使用示例:
path = "/fops"
query = ""
body = "YOUR_REQUEST_BODY"
secretKey = "YOUR_ACCESS_KEY_SECRET"
accessKey = "YOUR_ACCESS_KEY"
signing_str = build_signing_str(path, query, body)
sign = get_signature_hmac_sha1(signing_str, secretKey)
encode_sign = url_safe_encode_bytes(sign)
access_token = generate_access_token(accessKey, encode_sign)
print(access_token)
Java 示例
// 此函数通过将附加路径、查询参数和用换行符 '\n' 连接请求体来构造签名字符串.
private String buildSigningStr(String path, String query, String body) {
char connector = '\n';
StringBuilder signingStrBuilder = new StringBuilder(path);
if (StringUtils.isNotEmpty(query)) signingStrBuilder.append('?').append(query);
signingStrBuilder.append(connector);
if (StringUtils.isNotEmpty(body)) signingStrBuilder.append(body);
return signingStrBuilder.toString();
}
// 此函数通过给定的数据和密钥生成HMAC-SHA1签名.
public static String getSignatureHmacSHA1(byte[] data, String key) {
byte[] keyBytes = key.getBytes();
SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");
Mac mac;
StringBuffer sb = new StringBuffer();
try {
mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(data);
for (byte b : rawHmac) {
sb.append(byteToHexString(b));
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
// 此函数执行url安全的base64编码,并用 '=' 填充结果,直到它的长度是4的倍数.
public static byte[] urlSafeEncodeBytes(byte[] src) {
if (src.length % 3 == 0) return encodeBase64Ex(src);
byte[] b = encodeBase64Ex(src);
if (b.length % 4 == 0) return b;
int pad = 4 - b.length % 4;
byte[] b2 = new byte[b.length + pad];
System.arraycopy(b, 0, b2, 0, b.length);
b2[b.length] = '=';
if (pad > 1) b2[b.length + 1] = '=';
return b2;
}
String accessToken = String.format("%s:%s", accessKey, encodeSign);