秘钥对使用_阿里云物联网平台使用心得(34)HTTP协议第1步之获取认证令牌

1c728a781235ef7277a614ef6c65d3be.png

题目

大家好,超子又和大家见面了,超子我能力有限,水平不高,有什么错误的地方,欢迎板砖。超子接下来介绍如何构建HTTP的报文,对接阿里云物联网平台上传数据。总的来说我们需要经过两步走。

第1步:认证,通过HTTP报文上报设备的三元组等信息,进行认证,上报信息准确的话,服务器会在回复的报文中,下发认证的令牌token,目前平台token支持的有效期是7天。

第2步:上传数据,每次上传需要携带第1步下发的令牌token,如果过了有效期,需要再次认证,然后携带新的token令牌上传数据。

在讲解具体的报文构建之前,我们先要了解HTTP报文的结构,分为3个部分。

请求行:包含请求方法,比如上一篇文章提到的GET或是POST,然后还有URL以及HTTP协议版本,阿里云用的版本是HTTP/1.1,至于URL,我们等到具体构建报文的时候再看 。

请求头部( header ):包含一些关键的消息,阿里云会告诉你必须包含的头部,后面我们在具体看

请求数据(body):POST方法需要body,因为POST是上传数据,body就是要上传的数据内容。

b8bc4197fc096840609016082c7ea247.png

我们看上图,阿里云给出了请求行和请求头部( header )以及请求数据(body)的例子和说明。上图例子中的请求头部( header )有HOST和Content-Type,但是少一个Content-Length,表示请求数据(body)有多少个字节,POST方法必须有,但是图中没有给出,这点要注意一下,可能阿里云觉得大家都应该知道POST需要Content-Length,所以上图中就没写出来。

上图中POST /auth HTTP/1.1是请求行,其中POST是请求方法,/auth 是URL地址,HTTP/1.1是使用的版本,请求行必须完整的独占一行。

接下来看请求头部( header ),其中HOST就是我们需要访问的阿里云服务器地址,可以是IP或是域名形式,这里阿里给出的是域名。Content-Type表示阿里云要求的数据编码格式,只有满足格式要求,才能正确的解析数据,阿里需要的是json格式数据。Content-Length需要构建好body后,才能知道具体有多少字节。HOST和Content-Type以及Content-Length各自独占一行。

请求数据(body)包含着三元组的信息,是认证的关键。特别注意一点,请求头部( header )和请求数据(body)之间必须通过一个空行间隔,如果没有的话,就会出错,这一点一定要多加注意和小心。

723de587997805f61a927a94922ee3de.png

请求数据(body)的数据格式如下:

{“clientId”:“@”,“sign”:“#”,“productKey”:“*”,“deviceName”:“$"}

其中@、#、*和$,必须替换成相应的数据,我们先拿出三元组的信息,看上图。其中*和$很直观,*是产品秘钥,$是设备名称,@是客户端ID,可以自己定义,但是长度必须在64字符内,那么@的话,我就用产品秘钥&设备名称吧,我们先搞定以上3个,结果如下:

@是:a12dTIroTJC&D001

*是:a12dTIroTJC

$是:D001

最后就差#了,#需要做一步hmacsha5加密才能得到,加密的明文如下:

clientId%sdeviceName%sproductKey%s

3个%s需要替换成相应的数据,前面我们都准备好了,注意clientId后面的%s,就是前面的@。我们先把明文构建好,结果如下:

clientIda12dTIroTJC&D001deviceNameD001productKeya12dTIroTJC

明文一定要小心,不要多一个或是少一个字符,尤其是注意不要多空格,尤其是最后面如果多了空格,还不容易检查出来。还有就是最后面不要多回车,这个也不容易看出来。hmacsha5加密的秘钥就是三元组里的设备秘钥。

jBiRd3INpmL0zrb8XgURzP6JJOmFWMdJ

网上找一个加密网站,我们做一下加密。

82611ce9f8359da2851b7c8261dfb3aa.png

一定要检查明文和秘钥后面不要多空格和回车。然后我们使用hmacsha5加密,如此一来,请求数据(body)中最后的#也就搞定了,结果如下:

2f93c54d09f22eefacd04cf7cd826159

把@、#、*和$全部替换,最终的请求数据(body)结果如下:

{"clientId":"a12dTIroTJC&D001","sign":"2f93c54d09f22eefacd04cf7cd826159","productKey":"a12dTIroTJC","deviceName":"D001"}

数据一共是120个字节,所以我们可以确定请求头部( header )中的Content-Length的值了,就是120。然后我们构建一下整个报文,结果如下

POST /auth HTTP/1.1

Host: iot-as-http.cn-shanghai.aliyuncs.com

Content-Type: application/json

Content-Length: 120

{"clientId":"a12dTIroTJC&D001","sign":"2f93c54d09f22eefacd04cf7cd826159","productKey":"a12dTIroTJC","deviceName":"D001"}

一定要注意, header和body之间,要有一个空行,绝对不能少了。接下来用网络调试助手实测一下。首先建立TCP连接,远程主机地址和端口号如下所示:

iot-as-http.cn-shanghai.aliyuncs.com:80

1f40cb862e3d8231f44e0f7e45c50707.png

我们先建立TCP连接,然后把认证报文发给阿里云服务器,上图我们可以看到,如果我们的报文构建正确,阿里云会回复相应的数据,上图中红圈标注的,就是阿里云返回给我们的令牌token,我们接下来发送具体数据的时候,就要用到token了。这部分内容下次超子再给大家介绍。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.物联网的开发难度越来越低当小王被老板要求开发一个物联网项目时,他面临这许多种解决方案,从硬件到软件一应俱全。有的提供了模块化的硬件,有的提供了高度集成的软件开发环境,有的支持python开发,有的支持图形化开发,有的提供硬件SDK,有的提供从云端到移动端成套的解决方案。小王该如何选择?的确,物联网的开发难度越来越低,只要你想,就可以拖拖拽拽做出来一个简单的设备。移动端APP呢?也是如此,你甚至可以登陆某平台的网站在线生成一个安装包直接安装到手机上。但是这些便利化的前提是失去对核心技术的掌握,以及跳转界面、使用习惯等无法把控。2.移动端APP技能是必备当学习物联网技术的小赵到某公司应聘时,公司技术主管对他的知识结构基本满意。然后让他开发一个物联网项目,要软硬件结合,移动端APP是必备的。小赵可以很快做出来一台基于ESP8266的硬件设备,连接到某物联网平台,做出来一个手机端的APP。但是主管对这个APP不太满意,问小赵自己会不会制作手机APP?小赵有些尴尬。为什么移动端APP技能是必备?因为物联网技术涉及到的知识领域有很多个,能够自己做出APP才算是将这些领域的知识完全掌握。就像是一个侠客的武功,最厉害的那个还没有练成,还不能算是真正的高手。3.定制APP价格很贵市场上有不少的物联网软件公司开展物联网应用APP的定制业务,当然价格不菲。如果是公司采购,你将花费较大的价格采购到一个未来并不可控的APP。反过来说,如果是学生应聘,你学到移动端应用知识,将大大提升你的竞争力,你的技能将成为核心竞争力。4.没有类似的教程原因就不多说了。即使有一些片段代码给了大家,大家也做不出来一个能用的APP。5.本课程要讲什么基于阿里云物联网平台(其他物联网平台类似),带您使用Android Studio编写一个安卓APP,实现连接阿里云物联网平台,控制一台智能灯。通过一个软硬件结合项目,结合源代码,一点一点为大家讲解怎么样连接阿里云物联网平台,每一个骤是怎么回事,源代码怎么实现。为了照顾一些零基础的朋友,课程中还会用一些通俗的语言介绍这些知识,让大家掌握书上和网络上一些不太注意的技术细节。  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值