欢迎您来到腾讯云!积分商城

腾讯云腾讯云论坛

 找回密码
 立即注册
忘了密码?

扫一扫,访问微社区

快捷导航
搜索
查看: 26687|回复: 6

[官方教程] 云API接口鉴权方法

[复制链接]

4

主题

0

好友

16

积分

小白[LV1]

Rank: 1

云币
92
威望
16
发表于 2014-11-21 17:42:56 |显示全部楼层 |未分类
本帖最后由 GavinYao 于 2015-9-29 10:03 编辑

腾讯云 API 使用签名方法(Signature)对接口进行鉴权。每一次请求都需要在请求中包含签名信息, 以验证用户身份。
在第一次使用云API之前,用户首先需要在腾讯云网站上申请安全凭证,安全凭证包括 SecretId 和 SecretKey, SecretId 是用于标识 API 调用者的身份,SecretKey是用于加密签名字符串和服务器端验证签名字符串的密钥。SecretKey 必须严格保管。避免泄露。

1. 申请安全凭证

1. 登录 腾讯云, 进入 管理中心 页面
2. 点击 管理账号 下的 安全凭证 链接, 进入 云API访问密钥管理 页面
3. 在 云API访问密钥管理 页面可以新建 SecretId, 每个帐号最多可以创建两个 SecretId

2. 生成签名串

假设上一步申请的 SecretId 和 SecretKey 分别是:
SecretId: AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA
SecretKey: Gu5t9xGARNpq86cd98joQYCN3Cozk1qA


以 查询实例列表 请求为例, 请求参数为:
方法名: Action=DescribeInstances
SecretId: SecretId= AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA
当前时间戳: Timestamp=1408704141
随机正整数: Nonce=345122
区域: Region=gz


接口签名的详细步骤如下:

1. 对参数排序

对请求参数按参数名做字典序升序排列, 结果如下:

{    'Action' : 'DescribeInstances',    'Nonce' : 345122,    'Region' : 'gz',    'SecretId' : 'AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA',    'Timestamp' : 1408704141}
2. 拼接请求字符串

把上一步排序好的请求参数, 格式化成 k=v,然后用"&"拼接在一起。注意不包括Signature参数,v为原始值而非url编码后的值。结果为:

Action=DescribeInstances&Nonce= 345122&Region=gz&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&Timestamp=1408704141


3. 拼接签名源文字符串

拼接签名原文时需要如下参数:
请求方法: 支持 POST 和 GET 方式, 这里架设为 GET 请求, 注意 GET 为全大写
请求主机: cvm.api.qcloud.com, 根据接口所属模块不同域名也不同, 详见接口文档
请求路径: /v2/index.php
请求字符串: 即前 2 步生成的请求字符串


签名源文的拼接规则为:

请求方法 + 请求主机 +请求路径 + ? + 请求字符串



拼接结果为:

GETcvm.api.qcloud.com/v2/index.php?Action=DescribeInstances&Nonce= 345122&Region=gz&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&Timestamp=1408704141


4. 生成签名串

1. 腾讯云 API 使用 HMAC-SHA1 算法对请求进行签名
2. 签名串需要使用 Base64 编码
3. 发送请求时, 对签名串进行 Url Encode


以 PHP 语言为例:

$secretKey = 'Gu5t9xGARNpq86cd98joQYCN3Cozk1qA';
$srcStr = 'GETcvm.api.qcloud.com/v2/index.php?Action=DescribeInstances&Nonce=345122&Region=gz&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&Timestamp=1408704141';
$signStr = base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true));
echo $signStr;


这里得到的签名串为:

HgIYOPcx5lN6gz8JsCFBNAWp2oQ=


使用其它程序设计语言开发时, 可用上面示例中的原文进行签名验证, 得到的签名串与例子中的一致即可

5. 添加签名, 发送请求

1. 请求参数中添加 Signature 参数, 参数值为上一步生成的签名串, 并且对签名进行 Url Encode
2. 发送 HTTPS 协议的 GET 请求即可得到 JSON 字符串格式的接口返回值


最终的请求 URL 为:


https://cvm.api.qcloud.com/v2/index.php?Action=DescribeInstances&Nonce=345122&Region=gz&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&Signature=HgIYOPcx5lN6gz8JsCFBNAWp2oQ%3D&Timestamp=1408704141


将示例代码中的 YOUR_SECRET_ID 和 YOUR_SECRET_KEY 替换成实际的 SecretId 和 SecretKey
示例代码仅供参考, 请根据实际情况使用。


原文:
http://www.qcloud.com/wiki/接口鉴权







0

主题

0

好友

12

积分

小白[LV1]

Rank: 1

云币
7
威望
1
发表于 2015-9-28 14:24:37 |显示全部楼层
LZ那个示例代码看不了啊
回复

使用道具 举报

1

主题

0

好友

324

积分

程序猿[LV2]

Rank: 2Rank: 2

云币
1102
威望
324
发表于 2015-9-28 16:50:51 |显示全部楼层
感谢分享
回复

使用道具 举报

4

主题

0

好友

16

积分

小白[LV1]

Rank: 1

云币
92
威望
16
发表于 2015-9-29 10:04:42 |显示全部楼层
Misaka 发表于 2015-9-28 14:24
LZ那个示例代码看不了啊

论坛里面的加不了链接,原文在这里啊

http://www.qcloud.com/wiki/接口鉴权
回复

使用道具 举报

0

主题

0

好友

78

积分

小白[LV1]

Rank: 1

云币
200
威望
78
发表于 2016-9-9 20:37:50 |显示全部楼层
COS怎么认证,需要哪些字段么
回复

使用道具 举报

0

主题

0

好友

80

积分

小白[LV1]

Rank: 1

云币
200
威望
80
发表于 2016-10-17 18:36:39 |显示全部楼层
这个过程为什么不封装?
回复

使用道具 举报

1

主题

0

好友

69

积分

小白[LV1]

Rank: 1

云币
30
威望
30
发表于 2016-11-6 16:58:12 |显示全部楼层
请教一个问题、我用C# 写的一个获取接口鉴权的、出现了一个问题、比如我用的分词接口、指令请求参数text如果是字母就能获取到和php一样的signature/ 可是参数改成 文字 就失败了、是编码问题吗、可是api中明确说明 参数要用非编码 生成签名串
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册
您需要登录后才可以发帖 QQ登录

联系我们|腾讯云平台|积分商城|腾讯云官方论坛    

GMT+8, 2018-8-17 09:14 , Processed in 1.194413 second(s), 32 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部