Golang 实现华为云 DMS 签名

news/2024/11/17 6:44:49/

构造请求

首先构造请求,也就是要对哪个具体接口进行访问,需要提供什么必要的参数。在构造请求(点击查看中可以看到,对 DMS 服务来说必要的请求构成包括以下部分

  • 请求URI,例如 https://dms.cn-north-1.myhuaweicloud.com/v1.0/{project_id}/queues/{quque_id}(不同区域的Region部分不同)
  • 请求方法,如 "GET"、"POST"
  • 请求消息头,必选的是 "Content-Type",规定了消息体的格式,默认取值 "application/json",即消息体 "Body" 以 Json 格式提交
  • 请求消息体,有的接口需要,有的接口不需要

准备参数

以接口查看指定队列(点击查看)为例

  • 请求URI:https://dms.cn-north-1.myhuaweicloud.com/v1.0/{project_id}/queues/{quque_id}
  • 请求方法:"GET"
  • 请求消息体:无
  • project_id:项目ID,去统一身份认证的项目中根据区域不同查找
  • queue_id:要访问的队列ID,去控制台点开该队列查看
  • AK/SK:秘钥对,在统一身份认证内的用户的安全设置功能中管理,是生成签名的必需参数

计算签名

以AK/SK签名认证算法详解(点击查看)为标准,编写算法或使用 SDK,本例中使用的是官方提供的 SDK,调用步骤如下(点击查看)

生成 HTTP 请求

以 AK=ABCDE....WYZ 和 SK=123...890为例,使用 SDK 生成签名

/*
查看指定队列
*/
url := "https://dms.cn-north-1.myhuaweicloud.com/v1.0/506d66e5/queues/bc8e-86-42-8c-4d2"
r, err := http.NewRequest("GET",url,ioutil.NopCloser(bytes.NewBuffer([]byte(""))))
/*
添加必要的 Content-Type 头
*/
r.Header.Add("content-type", "application/json")
/*
创建签名对象并签名
*/
s := sign.Signer{ Key:conf.AK, Secret:conf.SK}
s.Sign(r)

s.Sign(r) 方法将两个请求头添加到了 r.Headers 中,一个是 X-Sdk-Date 其值是时间戳,另一个是 Authorization 其值是经过规定方式计算并拼接的一串字符串,如果将 r.Headers 打印出来就是

map[Authorization:[SDK-HMAC-SHA256 Access=ABCDE....WYZ, SignedHeaders=content-type;x-sdk-date, Signature=0e9d22d370b3b34b6108998c3ced1d99cdb6d813aa41b5efeb7828295bb8f7a8] Content-Type:[application/json] X-Sdk-Date:[20191105T083411Z]]

所有参数均已齐备,整理一下本次请求的所有内容

  • 请求完整URI:https://dms.cn-north-1.myhuaweicloud.com/v1.0/506d66e5/queues/bc8e-86-42-8c-4d2
  • 请求头
    • Content-Type:application/json
    • X-Sdk-Date:20191105T083411Z
    • Authorization:SDK-HMAC-SHA256 Access=ABCDE....WYZ, SignedHeaders=content-type;x-sdk-date, Signature=0e9d22d370b3b34b6108998c3ced1d99cdb6d813aa41b5efeb7828295bb8f7a8
    • 请求体:该接口无请求体,即 http 协议的 body 为空

使用 Postman 提交请求,响应正文如下

{"id": "bcf28b8e-83e6-4432-870c-413e79e555d2","name": "huawei-dms-queue-log-test","description": "","reservation": 4320,"created": 1559033038000,"queue_mode": "KAFKA_HA","max_msg_size_byte": 524288,"produced_messages": 2,"eff_date": 1559033038000,"group_count": 1,"kafka_topic": "k-506dba42b0f146b9a6026653544f66e5-bcf28b8e-83e6-4432-870c-413e79e555d2"
}

签名比对

以上信息有的经过了优化处理,屏蔽掉了可能的隐私信息,如何验证计算结果正确与否呢。当 URI=https://dms.cn-north-1.myhuaweicloud.com/v1.0/506dba42b0f146b9a6026653544f66e5/queues/bcf28b8e-83e6-4432-870c-413e79e555d2AK=ABCDE....WYZSK=123...890X-Sdk-Date=20191105T094500Z 时,签名结果如下即为正确

Authorization:
SDK-HMAC-SHA256 Access=ABCDE....WYZ, SignedHeaders=content-type;x-sdk-date, Signature=8e0cb2f284b44795eee578d3484217a929cc1d9347bc6445477322eff15f8743

注意

云服务中尤其是API调用可能涉及很多权限问题,要检查所有可能的权限是否打开,比如当前AK/SK对应的用户是否是IAM用户,该用户所在的用户组是否被授权了对DMS产品的访问。在本文编写前,就碰到了签名始终报错 402 的问题,在对IAM账号所在用户组赋予了相应的策略后访问正常,虽然不能100%确认是该原因。


http://www.ppmy.cn/news/475142.html

相关文章

研究9—华为工程师

801软件王”阮强胜:50岁,我还在编码 http://xinsheng.huawei.com/cn/index.php?appforum&modDetail&actindex&id4002759 802在华为“想做超前一点的事情”,可能吗 http://xinsheng.huawei.com/cn/index.php?appforum&mo…

如何使用参数化查询提高Cypher查询的性能

本文分享自华为云社区《使用参数化查询提高Cypher查询的性能:以华为云图引擎GES为例》,作者: 蜉蝣与海。 在DBMS中,参数化查询被视为一种有效预防SQL注入攻击的手段。华为云图引擎GES提供对gremlin和cypher查询语言的参数化查询支…

2023 华为 Datacom-HCIE 真题题库 09/12--含解析

单项选择题 1.[试题编号:190485] (单选题)华为交换机MAC地址表的老化时间默认是多少秒? A、500 B、5 C、300 D、400 答案:C 解析:无 2.[试题编号:190484] (单选题)如图所示,路由器的所有接口开启OSPF协议,链路的Cost值如图中标识,R2的Loopback0接口通告在区域1据…

2023 华为 Datacom-HCIE 真题题库 06/12--含解析

多项选择 1.[试题编号:190185] (多选题)如图所示,PE1和PE2之间通过Loopback0接口建立MP-BGP邻居关系,在配置完成之后,发现CE1和CE2之间无法互相学习路由,以下哪些项会导致该问题出现? A、PE1或PE2未在BGP-VPNv4单播地址族视图使能邻居 B、PE1与PE2之间的LSP隧道未建立…

【华为云会议开发指南】App ID鉴权介绍

为了降低第三方应用集成华为云会议难度,并且提升开放接口的安全性,华为云会议开放能力中支持基于App ID的鉴权方式。App ID是一个应用的标识,同一个App ID可以同时在第三方的桌面终端、移动终端、Web应用上使用。 App ID鉴权原理 图1 第三方…

GBase 8c 技术白皮书 五

安全特性 GBase 8c具有完备的安全特性,包括身份认证和鉴别、数据透明加密、三权分立、安全审计等。 身份认证和鉴别:在GBase 8c中,每个数据库用户都有一个不可重复的唯一性用户标识,并在数据库整个生命周期实现该用户标识的唯一性…

华为删除快照失败

处理假卷 审计解释 假卷,Cinder数据库存在卷记录,但是存储设备上不存在该卷。 若确认为假卷,建议用户将该卷从Cinder数据库中删除。 参数解释 审计报告名称是fakeVolumeAudit.csv,审计报告中各参数的含义如表1所示。 表1 审计…

亚马逊 华为云耀云_主流服务云端对决:华为云HECS/阿里云S6谁更强

随着云服务的兴起,大量的企业应用都纷纷上云,区别于传统的物理服务器,云服务器更容易上手,部署也更加快捷,这就催生了大量的云服务提供商,国外诸如微软、亚马逊、谷歌都有自己的云服务,而国内市…