前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云点播为什么鉴权一直都是失败的?

云点播为什么鉴权一直都是失败的?

原创
作者头像
用户2939064
修改2020-06-01 19:26:54
1.3K0
修改2020-06-01 19:26:54
举报
文章被收录于专栏:API问题API问题

{

"Response": {

"Error": {

"Code": "AuthFailure.SignatureFailure",

"Message": "The provided credentials could not be validated. Please check your signature is correct."

},

"RequestId": "ae67fddc-701c-4ee6-a2e5-db2697570421"

}

}

https://vod.tencentcloudapi.com/

String service = "vod";

String host = "vod.tencentcloudapi.com/";

String region = "ap-guangzhou";

String action = "DescribeMediaInfos";

String version = "2018-07-17";

String algorithm = "TC3-HMAC-SHA256";

//String timestamp = "1551113065";

String timestamp = String.valueOf(System.currentTimeMillis() / 1000);

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

// 注意时区,否则容易出错

sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

String date = sdf.format(new Date(Long.valueOf(timestamp + "000")));

// ************* 步骤 1:拼接规范请求串 *************

String httpRequestMethod = "POST";

String canonicalUri = "/";

String canonicalQueryString = "";

String canonicalHeaders = "content-type:application/json; charset=utf-8\n" + "host:" + host + "\n";

String signedHeaders = "content-type;host";

String payload = "{\"Limit\": 1, \"Filters\": [{\"Values\": [\"\\u672a\\u547d\\u540d\"], \"Name\": \"instance-name\"}]}";

String hashedRequestPayload = sha256Hex(payload);

String canonicalRequest = httpRequestMethod + "\n" + canonicalUri + "\n" + canonicalQueryString + "\n"

+ canonicalHeaders + "\n" + signedHeaders + "\n" + hashedRequestPayload;

System.out.println("canonicalRequest:::::"+canonicalRequest);

// ************* 步骤 2:拼接待签名字符串 *************

String credentialScope = date + "/" + service + "/" + "tc3_request";

String hashedCanonicalRequest = sha256Hex(canonicalRequest);

String stringToSign = algorithm + "\n" + timestamp + "\n" + credentialScope + "\n" + hashedCanonicalRequest;

System.out.println("stringToSign:::::"+stringToSign);

// ************* 步骤 3:计算签名 *************

byte[] secretDate = hmac256(("TC3" + SECRET_KEY).getBytes(UTF8), date);

byte[] secretService = hmac256(secretDate, service);

byte[] secretSigning = hmac256(secretService, "tc3_request");

String signature = DatatypeConverter.printHexBinary(hmac256(secretSigning, stringToSign)).toLowerCase();

System.out.println("signature::::::"+signature);

// ************* 步骤 4:拼接 Authorization *************

String authorization = algorithm + " " + "Credential=" + SECRET_ID + "/" + credentialScope + ", "

+ "SignedHeaders=" + signedHeaders + ", " + "Signature=" + signature;

System.out.println("authorization:::::"+authorization);

TreeMap<String, String> headers = new TreeMap<String, String>();

headers.put("Authorization", authorization);

headers.put("Content-Type", CT_JSON);

headers.put("Host", host);

headers.put("X-TC-Action", action);

headers.put("X-TC-Timestamp", timestamp);

headers.put("X-TC-Version", version);

headers.put("X-TC-Region", region);

StringBuilder sb = new StringBuilder();

sb.append("curl -X POST https://").append(host)

.append(" -H \"Authorization: ").append(authorization).append("\"")

.append(" -H \"Content-Type: application/json; charset=utf-8\"")

.append(" -H \"Host: ").append(host).append("\"")

.append(" -H \"X-TC-Action: ").append(action).append("\"")

.append(" -H \"X-TC-Timestamp: ").append(timestamp).append("\"")

.append(" -H \"X-TC-Version: ").append(version).append("\"")

.append(" -H \"X-TC-Region: ").append(region).append("\"")

.append(" -d '").append(payload).append("'");

System.out.println(sb.toString());

String FileId = "52858908035781111000";

JSONObject paramS = new JSONObject();

paramS.put("Action","DescribeMediaInfos");

paramS.put("FileIds.0",FileId);

paramS.put("Filters.0","basicInfo");

String resultStr = Http.post("https://vod.tencentcloudapi.com/", headers, paramS.toString(), "UTF-8");

没看出问题

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云 API
云 API 是腾讯云开放生态的基石。通过云 API,只需少量的代码即可快速操作云产品;在熟练的情况下,使用云 API 完成一些频繁调用的功能可以极大提高效率;除此之外,通过 API 可以组合功能,实现更高级的功能,易于自动化, 易于远程调用, 兼容性强,对系统要求低。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档