签名机制

对于每一次HTTP或者HTTPS协议请求,我们会根据访问中的签名信息验证访问请求者身份。

说明 AccessKey相当于用户密码,AccessKey用于调用API。其中AccessKeyID是访问者身份,AccessKeySecret是加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密谨防泄露。更多详情,请参见创建AccessKey。

步骤一:构造待签名字符串(公共请求参数)

  1. 排序参数。排序规则以首字母顺序排序,排序参数包括公共请求参数和接口自定义参数,不包括公共请求参数中的sign参数。
  2. 使用等号(=)连接编码后的请求参数和参数取值。
  3. 使用与号(&)连接编码后的请求参数,注意参数排序与步骤1一致。

现在,您得到了规范化请求字符串

步骤二:构造签名字符串

  1. 计算待签名字符串的md5值。示例格式。

    Signature = md5(StringToSign + AccessSecret)
    
  2. 添加Signature到请求参数中。

示例一: longmao.project.create (创建项目)

  1. 获取AccessKey, 示例值如下:AccessKeyId: 8hUqvqoi, AccessKeySecret: f5ac74af319590049ebf78dd19ff1535179592e0
  2. 构造待签名字符串。
    signString = access_key_id=8hUqvqoi&format=JSON&method=longmao.project.create&timestamp=1576577830120&version=1.0
    
  3. 计算签名值。
    Signature = md5(signString + AccessSecret)
    
  4. 签名结果值
     64EF8CAFAA7CE3BBA5F820A3288C5F92
    

示例二: Java签名工具类

public class SignUtils {

    public static String sign(Map<String,String> params, String key) throws Exception {
        String[] keys = params.keySet().toArray(new String[0]);
        Arrays.sort(keys);

        StringBuilder query = new StringBuilder();
        for (String name : keys) {
            query.append("&").append(name).append("=").append(params.get(name));
        }
        if(query.length() > 0) {
            return md5(query.substring(1) + key).toUpperCase();
        }else{
            return "";
        }
    }

    private static String md5(String src) throws Exception {
        // Create MD5 Hash
        MessageDigest digest = MessageDigest.getInstance("MD5");
        digest.update(src.getBytes());
        byte messageDigest[] = digest.digest();

        // Create Hex String
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < messageDigest.length; i++) {
            String h = Integer.toHexString(0xFF & messageDigest[i]);
            while (h.length() < 2) {
                h = "0" + h;
            }
            hexString.append(h);
        }
        return hexString.toString();
    }

}
Copyright@北京安捷智合科技有限公司 保留所有权 all right reserved,powered by Gitbook更新时间: 2023-07-17 17:21:39

results matching ""

    No results matching ""