ECS API中Signature错误的排查方法

简介: Signature的生成方法 将get中提交的参数(除了aks以外所有的参数)按照一定的组成规则拼成一个字符串,前面再加上GET&/&组成StringToSign,然后对StringToSign做 HMAC计算,以Access Key Secret+一个“&”号为HMAC计算的key,最终算出的字符串就是Signature。

Signature的生成方法

将get中提交的参数(除了aks以外所有的参数)按照一定的组成规则拼成一个字符串,前面再加上GET&/&组成StringToSign,然后对StringToSign做 HMAC计算,以Access Key Secret+一个“&”号为HMAC计算的key,最终算出的字符串就是Signature。

排查思路

若碰到反馈Signature错误,可以排查以下几点:

  1. 在构造“StringToSign”时是否对key值做了A-Z的字典排序
  2. 是否将所有的参数都放入了StringToSign
  3. 计算前是否对StringToSign中的值做了urlencode,即将一些特殊的字符替换成类似%3D这样的字符串,如“=”需要替换成“%3D”,“/”要替换成“%2F”等,参见下述说明:
    a、 对于字符 A-Z、a-z、0-9 以及字符“-”、“_”、“.”、“~”不编码;

b、 对于其他字符编码成 “%XY” 的格式,其中 XY 是字符对应 ASCII 码的 16 进制表示。比如英文的双引号(”)对应的编码就是 %22
c、 对于扩展的 UTF-8 字符,编码成 “%XY%ZA…” 的格式;
d、 需要说明的是英文空格( )要被编码是 %20,而不是加号(+)。

  1. 是否使用了指定的算法,目前Signature需要使用HMAC-SHA1算法,在Java中通过Mac mac = Mac.getInstance("HmacSHA1");来获得HMAC-SHA1算法的对象
  2. 检查HMAC-SHA1运算时是否是将Access Key Secret+&作为key(如Access Key Secret为abc,那么使用“abc&”作为运算的key),运算过程编码使用UTF-8编码

以下是一个例子

1、 比如说要查询可用的镜像,先加入除了Signature以外所有的参数(值被忽略):

[ImageOwnerAlias, SignatureVersion, Action, Format, PageSize, SignatureNonce, Version, AccessKeyId, SignatureMethod, RegionId, Timestamp]

2、 对它们进行字典排序:

[AccessKeyId, Action, Format, ImageOwnerAlias, PageSize, RegionId, SignatureMethod, SignatureNonce, SignatureVersion, Timestamp, Version]

3、 挨个将它们拼接在一起(注意这个时候Timestamp中的值就已经经过了urlencode了,将“:”替换为“%3A”):

AccessKeyId=6olc8au16tjr574v222c923p&Action=DescribeImages&Format=XML&ImageOwnerAlias=system&PageSize=10&RegionId=cn-hangzhou&SignatureMethod=HMAC-SHA1&SignatureNonce=352f98b6-5fbe-489c-b8a4-5d484939a8d5&SignatureVersion=1.0&Timestamp=2015-09-12T07%3A45%3A58Z&Version=2014-05-26

4、 在前面加上GET&/&:

GET&/&AccessKeyId=6olc8au16tjr574v222c923p&Action=DescribeImages&Format=XML&ImageOwnerAlias=system&PageSize=10&RegionId=cn-hangzhou&SignatureMethod=HMAC-SHA1&SignatureNonce=352f98b6-5fbe-489c-b8a4-5d484939a8d5&SignatureVersion=1.0&Timestamp=2015-09-12T07%3A45%3A58Z&Version=2014-05-26

5、 再对整个字符串做urlencode,可以看到其中的“/”、“=”和参数键值对中的“&”都已经被替换,注意最前面的GET之后的两个“&”并没有被替换:

GET&%2F&AccessKeyId%3D6olc8au16tjr574v222c923p%26Action%3DDescribeImages%26Format%3DXML%26ImageOwnerAlias%3Dsystem%26PageSize%3D10%26RegionId%3Dcn-hangzhou%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D352f98b6-5fbe-489c-b8a4-5d484939a8d5%26SignatureVersion%3D1.0%26Timestamp%3D2015-09-12T07%253A45%253A58Z%26Version%3D2014-05-26

6、 然后构造HMAC运算的key,很简单,将Access Key Secret再加上一个“&”即可:

IamAccessKeySecret&

7、 扔给电脑做HMAC-SHA1运算,然后算出来一个最终的字符串:

53wPekiWxh45TgPxVb4bkXrzZ6M=

8、 这个字符串就是最终的Signature值,然后将其加入到HTTP get请求中,组成最终的get参数字符串,特别要注意Signature加入后需要确认其中的特殊符号如“=”是否被转换为%xx的字符串。

ImageOwnerAlias=system&SignatureVersion=1.0&Action=DescribeImages&Format=XML&PageSize=10&SignatureNonce=352f98b6-5fbe-489c-b8a4-5d484939a8d5&Version=2014-05-26&AccessKeyId=6olc8au16tjr574v222c923p&Signature=53wPekiWxh45TgPxVb4bkXrzZ6M%3D&SignatureMethod=HMAC-SHA1&RegionId=cn-hangzhou&Timestamp=2015-09-12T07%3A45%3A58Z

9、 然后就可以向ECS的API服务器发送请求了

参考文档

1.官网的生成Signature文档:https://help.aliyun.com/document_detail/25492.html

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
23天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
58 9
|
13天前
|
负载均衡 数据可视化 API
像素流送api ue多人访问需要什么显卡服务器
本文总结了关于像素流送技术的五大常见问题,包括是否支持Unity模型推流、UE多人访问的最大并发数、所需服务器配置、稳定性问题及API支持情况,旨在帮助开发者更好地理解和应用这一技术。
41 1
|
14天前
|
API
如果API调用失败,我应该如何排查问题?
当小红书API调用失败时,可按以下步骤排查:1. 检查请求参数;2. 确认身份验证凭据;3. 控制调用频率;4. 检查网络连接;5. 查看错误码和日志;6. 核实授权范围;7. 联系技术支持;8. 定期更新与测试。这些方法有助于系统地解决问题,确保API调用稳定。
|
1月前
|
弹性计算 异构计算
2024年阿里云GPU服务器多少钱1小时?亲测价格查询方法
2024年阿里云GPU服务器每小时收费因实例规格不同而异。可通过阿里云GPU服务器页面选择“按量付费”查看具体价格。例如,NVIDIA A100的gn7e实例为34.742元/小时,NVIDIA A10的gn7i实例为12.710156元/小时。更多详情请访问阿里云官网。
104 2
|
1月前
|
人工智能 弹性计算 关系型数据库
学生免费领取阿里云服务器一年的方法,以及各种活动
学生可以免费领取阿里云服务器一年,新人可获2核4G,非新人2核2G。访问链接注册并完成学生认证,领取300元无门槛优惠券,购买轻量应用服务器。此外,还有多项活动可赢取实物奖品。
196 2
|
2月前
|
JSON JavaScript 前端开发
使用 Node.js 和 Express 构建 RESTful API 服务器
【10月更文挑战第3天】使用 Node.js 和 Express 构建 RESTful API 服务器
|
2月前
|
Web App开发 安全 网络安全
tplink虚拟服务器设置方法
为了更全面地理解云服务及其在企业应用中的角色,推荐访问,他们提供了一系列高性能、安全稳定的云服务器解决方案,包括但不限于香港云服务器、高防服务器等,特别适合寻求全球化业务扩展的企业。蓝易云不仅拥有全球化的基础设施布局,还提供针对各种行业定制的全栈云解决方案,助力企业实现云端部署,跨越传统界限,即刻启航云端之旅。
44 0
|
2月前
|
前端开发 Docker 容器
主机host服务器和Docker容器之间的文件互传方法汇总
Docker 成为前端工具,可实现跨设备兼容。本文介绍主机与 Docker 容器/镜像间文件传输的三种方法:1. 构建镜像时使用 `COPY` 或 `ADD` 指令;2. 启动容器时使用 `-v` 挂载卷;3. 运行时使用 `docker cp` 命令。每种方法适用于不同场景,如静态文件打包、开发时文件同步及临时文件传输。注意权限问题、容器停止后的文件传输及性能影响。
351 0
|
2月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
22 0
|
2月前
|
弹性计算 数据安全/隐私保护 Windows
阿里云国际版无法远程连接Windows服务器的排查方法
阿里云国际版无法远程连接Windows服务器的排查方法