签名认证
所有文档

          舆情服务

          签名认证

          地域风向标API会对每个访问的请求进行身份认证,以保障用户的安全。安全认证采用Access Key与请求签名机制。Access Key由Access Key ID和Secret Access Key组成,均为字符串,由百度开放云官方颁发给用户。其中Access Key ID用于标识用户身份,Access Key Secret 是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密。

          对于每个HTTP请求,用户需要使用下文所描述的方式生成一个签名字符串,并将认证字符串放在HTTP请求的Authorization头域里。

          签名字符串格式

          bce-auth-v{version}/{accessKeyId}/{timestamp}/{expireTime}/{signedHeaders}/{signature}

          其中:

          • version是正整数,目前取值为1。
          • timestamp是生成签名时的时间。时间格式符合通用约定
          • expireTime表示签名有效期限,单位为秒,从timestamp所指定的时间开始计算。
          • signedHeaders是签名算法中涉及到的头域列表。头域名字之间用分号(;)分隔,如host;x-bce-date。列表按照字典序排列。当signedHeaders为空时表示取默认值。
          • signature是256位签名的十六进制表示,由64个小写字母组成,生成方式由如下签名生成算法给出。

          签名生成算法

          有关签名生成算法的具体介绍,请参看鉴权认证机制

          token生成算法

          token为使用 HMAC 方法生成带有密钥的哈希值,通过user_key和user_secret生成。申请开通舆情服务后,user_key和user_secret由百度智能云提供。生成token的参考代码如下:

          python

          import time
          import hmac
          import hashlib
          timestamp = str(int(time.time()))
          token = hmac.new(api_secret, api_key + timestamp, hashlib.sha1).hexdigest()

          java

           public static void main(String[] args) {
                  String user_key = "d520c05ea2ab40568f119154ac7de67f";   //实际使用时客户需修改为自己的user_key
                  String user_secret = "825a1efa5b29c29272ae8a6c5286fdrf";   //实际使用时客户需修改为自己的user_secret
                  long timestamp = System.currentTimeMillis();
                  String data = user_key + timestamp;
                  String hmac = encode(data, user_secret);
                  System.out.println(hmac);
              }
              private static String toHexString(byte[] bytes) {
                  Formatter formatter = new Formatter();
                  for (byte b : bytes) {
                      formatter.format("%02x", b);
                  }
                  return formatter.toString();
              }
              private static String encode(String data, String key) {
                  String token = null;
                  try {
                      SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");
                      Mac mac = Mac.getInstance("HmacSHA1");
                      mac.init(signingKey);
                      token = toHexString(mac.doFinal(data.getBytes()));
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
                  return token;
              }
          上一篇
          API总述
          下一篇
          接口说明