腾讯云API接口鉴权v3 鉴权失败问题 AuthFailure.SignatureFailure
最近我开发的CRM项目正好在做营销短信的功能,这个功能需要对接腾讯云的第三方短信接口。众所周知,对接接口最难的就是鉴权部分了,毕竟为了安全嘛。云API鉴权一直是比较晦涩难懂的,建议大家还是去github下载安装SDK,可以免去鉴权这一步,非常方便。
但是既然发这篇文章,我最终还是选择了使用API的方式。下面简单说一下我在鉴权遇到的坑:
{"Response":{"Error":{"Code":"AuthFailure.SignatureFailure","Message":"The provided credentials could not be validated. Please check your signature is correct."},"RequestId":"1c56be9c-844f-43bf-ac2a-587be2b5aa7a"}}
调用接口的时候一直在报这个鉴权错误,使用腾讯云提供的工具 API Explorer 测试发现程序可以运行,参数也都是对的。
下面是腾讯提供的源码:
<?php
$secretId = "AKIDz8krbsJ5yKBZQpn74WFkmLPx******";
$secretKey = "Gu5t9xGARNpq86cd98joQY******";
$host = "cvm.tencentcloudapi.com";
$service = "cvm";
$version = "2017-03-12";
$action = "DescribeInstances";
$region = "ap-guangzhou";
// $timestamp = time();
$timestamp = 1551113065;
$algorithm = "TC3-HMAC-SHA256";// step 1: build canonical request string
$httpRequestMethod = "POST";
$canonicalUri = "/";
$canonicalQueryString = "";
$canonicalHeaders = "content-type:application/json; charset=utf-8\n"."host:".$host."\n";
$signedHeaders = "content-type;host";
$payload = '{"Limit": 1, "Filters": [{"Values": ["\u672a\u547d\u540d"], "Name": "instance-name"}]}';
$hashedRequestPayload = hash("SHA256", $payload);
$canonicalRequest = $httpRequestMethod."\n".$canonicalUri."\n".$canonicalQueryString."\n".$canonicalHeaders."\n".$signedHeaders."\n".$hashedRequestPayload;
echo $canonicalRequest.PHP_EOL;// step 2: build string to sign
$date = gmdate("Y-m-d", $timestamp);
$credentialScope = $date."/".$service."/tc3_request";
$hashedCanonicalRequest = hash("SHA256", $canonicalRequest);
$stringToSign = $algorithm."\n".$timestamp."\n".$credentialScope."\n".$hashedCanonicalRequest;
echo $stringToSign.PHP_EOL;// step 3: sign string
$secretDate = hash_hmac("SHA256", $date, "TC3".$secretKey, true);
$secretService = hash_hmac("SHA256", $service, $secretDate, true);
$secretSigning = hash_hmac("SHA256", "tc3_request", $secretService, true);
$signature = hash_hmac("SHA256", $stringToSign, $secretSigning);
echo $signature.PHP_EOL;// step 4: build authorization
$authorization = $algorithm." Credential=".$secretId."/".$credentialScope.", SignedHeaders=content-type;host, Signature=".$signature;
echo $authorization.PHP_EOL;$curl = "curl -X POST https://".$host.' -H "Authorization: '.$authorization.'"'.' -H "Content-Type: application/json; charset=utf-8"'.' -H "Host: '.$host.'"'.' -H "X-TC-Action: '.$action.'"'.' -H "X-TC-Timestamp: '.$timestamp.'"'.' -H "X-TC-Version: '.$version.'"'.' -H "X-TC-Region: '.$region.'"'." -d '".$payload."'";
echo $curl.PHP_EOL;
解决方法:
1、$payload参数是一个字符串,字符串里的内容是你传的参数json_encode后的内容(很多同学这个参数直接传了json格式,应该是字符串!)。
2、$canonicalHeaders参数里面如果有设置编码的参数charset=utf-8的话,那么请求头header中也必须要有这个参数并且空格也要保持一致,上面有空格,下面也要有,反之就会鉴权失败。
3、希望大家都注意一下细节,找问题的过程真的很曲折。
腾讯云API接口鉴权v3 鉴权失败问题 AuthFailure.SignatureFailure相关推荐
- python调用(百度云、腾讯云)API接口表格识别并保存为excel
Python表格识别 图像识别具有较高的商业价值,本节主要通过python调用(百度云.腾讯云)API接口表格识别并保存为excel分析表格识别的能力: 提示:需分别申请密钥,在相应位置添加自己密钥即 ...
- Python3 使用腾讯云 API 接口实现音频文件转写(支持本地音频或者 url 音频)
本文参考链接: https://blog.csdn.net/wangliuqi123/article/details/80527417 https://blog.csdn.net/wangliuqi1 ...
- 调用腾讯云OCR接口识别身份证和户口本
一.添加项目pom文件依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson ...
- Java腾讯会议api接口,创建会议、查询会议,取消会议调用实例,以及踩过的坑
最近公司需要做一个腾讯会议API的对接,经过查看官方文档和腾讯相关技术人员周旋~~以及不断踩坑,终于在我的不懈努力下,成功将API接口调通了 腾讯会议API接口文档:https://cloud.ten ...
- 用Python调用华为云API接口发短信
[摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...
- 小程序智能识别快递收货地址,自动解析出省市区等信息,让地址标准化格式的实现(使用腾讯云api)
源码直接使用,下载地址 1,下载源码后需要改两个editaddress.js中的参数即可使用. //云市场分配的密钥Id let appKey = "你自己的secretId"; ...
- 腾讯云API与国家气象局API获取实时天气
腾讯云API获取天气(收费) package com.vxdata.cases.common.utils;import com.alibaba.fastjson.JSONObject; import ...
- 【文字识别】腾讯云API:提取表格数据并生成Excel文件
一.使用工具及python包介绍 腾讯云API 国内大型互联网公司都提供云服务,如阿里.百度.腾讯等.本文选择腾讯云服务,是因为提供的API说明比较详细,看一遍就能用.更良心的是,提供了在线测试的功能 ...
- 喜报:恭喜腾讯云 API 网关获得国内首张可信云认证证书
2020 年 10 月 21 日,"2020 云原生产业大会"在北京召开.本届大会由中国信息通信研究院主办,中国通信标准化协会云计算标准和开源推进委员会承办.会上发布了云原生领域评 ...
最新文章
- nil slice 和 空 slice
- 诗与远方:无题(三十四)- 曾经写给妹子的一首诗
- 华为nova7se乐活版支持鸿蒙,华为nova7se乐活版和畅享20se哪个好 参数区别对比评测...
- php代码 编码转换,php字符编码转换代码
- 使用python发邮箱遇到的问题
- 墨尔本大学 SWEN20003 Project2 课业解析
- 考拉验数(自动化验数)设计方案和实现
- python牛顿法求方程的根_python计算方程式根的方法 如何用python计算三元方程
- 查看计算机ip地址配置信息的命令是,查看电脑配置指令大全
- android获取ro._Android 简单的设备信息获取
- 这100 个网络基础知识 看完成半个网络高手
- 在职场中如何保持新鲜感
- CF1110E Magic Stones
- 上海市历年平均工资及社保基数
- Gated Mechanism for Attention Based Multi Modal Sentiment Analysis 阅读笔记
- CENT OS 8 Stream 安装部署 Zabbix 6.0 LTS
- Love Story Remix(I Love You)
- 人工神经网络的拓扑结构,三层神经网络结构图
- 与人交往的基本礼仪!
- GBase 8c支持Foreign Data Wrappers