阿里云 .NET SDK Roa 和 Rpc 风格签名
阿里云 .NET SDK Roa 和 Rpc 风格的签名 Demo,适用于自己不想用其提供的SDK,想用自己组装 Roa 和 Rpc 的签名方式。
Roa 和 Rpc 的签名方式主要有以下几个不同点:
- 两者 Header 中的分割方式, Roa 的使用的是 “\n” ,Rpc 使用的是 "&"。
- Rpc 中主要在于 组装 Query 的过程,而 Roa 在于 Header 的拼接上。
- 其次就是 siganture 计算方式的不同。
Roa 的核心逻辑代码如下:
StringToSign 的逻辑
public override string ComposeStringToSign(IDictionary<string, string> headers)
{
var sb = new StringBuilder();
sb.Append(MethodType).Append(HeaderSeparator);
if (headers.ContainsKey("Accept")) sb.Append(headers["Accept"]);
sb.Append(HeaderSeparator);
if (headers.ContainsKey("Content-MD5")) sb.Append(headers["Content-MD5"]);
sb.Append(HeaderSeparator);
if (headers.ContainsKey("Content-Type")) sb.Append(headers["Content-Type"]);
sb.Append(HeaderSeparator);
if (headers.ContainsKey("Date")) sb.Append(headers["Date"]);
sb.Append(HeaderSeparator);
var uri = ReplaceOccupiedParameters(UrlPattern, Paths);
sb.Append(BuildCanonicalHeaders(headers, "x-acs-", HeaderSeparator));
sb.Append(BuildQuerystring(uri, Queries, QuerySeparator));
return sb.ToString();
}
Rpc 的 StringToSign 逻辑:
public override string ComposeStringToSign(IDictionary<string, string> queries)
{
var tempQueries = new Dictionary<string, string>(queries);
var sortedDictionary = new SortedDictionary<string, string>(tempQueries, StringComparer.Ordinal);
var headerQueryString = new StringBuilder();
foreach (var item in sortedDictionary)
headerQueryString.Append(HeaderSeparator)
.Append(SignatureHelper.ValueEncode(item.Key))
.Append("=")
.Append(SignatureHelper.ValueEncode(item.Value));
var stringToSign = new StringBuilder();
stringToSign.Append(MethodType);
stringToSign.Append(HeaderSeparator);
stringToSign.Append(SignatureHelper.ValueEncode("/"));
stringToSign.Append(HeaderSeparator);
stringToSign.Append(SignatureHelper.ValueEncode(headerQueryString.ToString().Substring(1)));
return stringToSign.ToString();
}
最后使用的 signature 使用 HMACSHA1 算法 与 相应的 AccessKeySecret 进行加密:
public static string ComputeSignature(string stringToSign, string accessKeySecret)
{
using (var hmac = new HMACSHA1(Encoding.UTF8.GetBytes(accessKeySecret)))
{
var hashValue = hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign));
return Convert.ToBase64String(hashValue);
}
}
源码以及demo 地址: https://github.com/doublnt/aliyun-csharp-signature
阿里云 .NET SDK Roa 和 Rpc 风格签名的更多相关文章
- 阿里云 OCS SDK for NodeJS介绍
阿里云 OCS SDK for NodeJS介绍 阿里云技术团队:熊亮 阿里云 SDK for NodeJS 是为 NodeJS 开发者提供使用阿里云各项服务的统一入口,由阿里云UED团队负责开发维护 ...
- 使用阿里云Python SDK管理ECS安全组
准备工作 本机操作系统:CentOS7 python版本:python2.7.5 还需要准备如下信息: 一个云账号.Access Key ID.Access Key Secret.安全组ID.Regi ...
- 快速上手阿里云oss SDK
使用阿里云oss SDK 依赖安装: pip install oss2 pip install aliyun-python-sdk-sts 版本最好是 2.7.5 或以上 如果要开启 crc64 循环 ...
- 揭秘阿里云 RTS SDK 是如何实现直播降低延迟和卡顿
作者:予涛 途坦 这个夏天,没什么能够比一场酣畅淋漓的奥运比赛来的过瘾.但是,在视频平台直播观看比赛也有痛点:"卡顿" 和 "延时".受限于不同地域.复杂的网络 ...
- 阿里云直播SDK - .NET
阿里云sdk:https://develop.aliyun.com/sdk/csharp?spm=5176.doc27234.2.4.QiJb9l Github:https://github.com/ ...
- thinkPHP中怎么使用阿里云的sdk
使用阿里云官方给的方法总会报错 Class 'Home\Controller\DefaultProfile' not found 这样是因为namespace的原因,将aliyun sdk 放在con ...
- 使用阿里云Java SDK 实现 DDNS
本代码的实现前提: 1.拥有阿里云域名,且获取了Access Key 及 Access Secret 2.能获取外网IP的页面地址(注意:ip138.com的实际包含ip地址为http://2018. ...
- 阿里云OSS-web直传---在服务端c#签名,浏览器直传
OSS web直传---在服务端php签名,浏览器直传 本文:OSS web直传---在服务端c#签名,浏览器直传 其他语言的范例地址:https://help.aliyun.com/document ...
- 通过SDK和API获取阿里云RDS的监控数据
阿里云的RDS自带的监控系统获取数据不怎么直观,想要通过API获取数据通过zabbix显示,因为网上资料缺乏和其他一些原因,获取API签名很困难,但使用阿里云的SDK可以完美避开获取签名的步骤. 阿里 ...
随机推荐
- Java开发桌面程序学习(五)——文件选择器和目录选择器的使用
选择器的使用 DirectoryChooser目录选择器官方文档 FileChooser文件选择器官方文档 文件选择器的使用 JavaFx中有个FileChoser,可以打开一个对话框来选择文件 Fi ...
- SpringBoot(14)—注解装配Bean
SpringBoot(14)-注解装配Bean SpringBoot装配Bean方式主要有两种 通过Java配置文件@Bean的方式定义Bean. 通过注解扫描的方式@Component/@Compo ...
- 你见过的最全面的 Python 重点
由于总结了太多的东西,所以篇幅有点长,这也是我"缝缝补补"总结了好久的东西. Py2 VS Py3 print成为了函数,python2是关键字 不再有unicode对象,默认st ...
- Python-标准库(常用模块)
前言: 之所以为不同模块划分重要程度,是因为大家不不可能精力一直集中,也不可能一下掌握所有, 但这个并不表示重要度低的可以不用掌握 ! 你必须掌握的点是每个模块分别干什么事,今后在需要实现某些功能时能 ...
- Java并发编程艺术读书笔记
1.多线程在CPU切换过程中,由于需要保存线程之前状态和加载新线程状态,成为上下文切换,上下文切换会造成消耗系统内存.所以,可合理控制线程数量. 如何控制: (1)使用ps -ef|grep appn ...
- [20190530]ORACLE 18c - ALTER SEQUENCE RESTART.txt
[20190530]ORACLE 18c - ALTER SEQUENCE RESTART.txt --//以前遇到要重置或者调整seq比较麻烦,我有时候采用比较粗暴的方式就是删除重建.--//18c ...
- 获取SpringCloud gateway响应的response的值,记录踩坑
最近在做网关改造,想要通过Gateway过滤器获取ResponseBody的值,查看了网上的帖子和官网内容: 帖子:https://cloud.tencent.com/developer/articl ...
- 删除带外键的表【foreign key constraint fails】报错
title: 删除带外键的表[foreign key constraint fails]报错 date: 2018-08-02 21:59:06 tags: 数据库 --- 遥想当时正在学hibern ...
- VSCode 如何同步设置
微软新推出的 VSCode 是一款开源.轻量.良心的开发工具,一经问世,迅速受到全球广泛开发者的好评与青睐,威风之下有干掉 Sublime Text 的趋势.然而有不少 VSCode 使用者吐槽其不能 ...
- 渗透测试学习 十九、 XSS跨站脚本漏洞详解 续2
二阶注入环境搭建 74cms 3.4 直接将源码放在PHPstudy的www路径下,在地址栏中输入127.0.0.1回车 然后进入网站首页,在填写简历里面存在二阶注入 先注册一个账号 创建简历 前面的 ...