物联网平台采用Token进行鉴权。
Token是OAuth中的概念,如果您要深入理解OAuth,可以去https://oauth.net/2/了解详情,您也可以参阅我们整理的 OAuth 2.0 中文简明教程。
现在我们来理解一下Token
1、Token的引入:
Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
2、Token的定义:
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
3、使用Token的目的:
Token的目的是为了减轻服务器的压力,减少频繁的查询数据库。
简单理解为:
Token 是在服务端产生的。如果客户端使用用户名/密码向服务端请求认证,服务端认证成功,那么服务端会返回 Token 给客户端,客户端可以在每次请求的时候带上 Token 证明自己的合法地位。
物联网平台的Token说明:
1、使用appId与secret换取accessToken
向物联网平台提供你应用的appId与secret,物联网平台给你颁发一个accessToken,除了鉴权接口与刷新token接口,访问其他接口必须向物联网平台提供accessToken。
2、accessToken是有有效期的
物联网平台的accessToken有效期默认为3600秒,并且无法修改。accessToken过期后就会失效,无法再访问物联网平台的其它接口。
3、accessToken是唯一的
物联网平台的accessToken一旦重新获得或者刷新,那么以前的accessToken就失效了,要想访问物联网平台接口,必须使用最新的accessToken。
4、频繁的获取accessToken会出错
频繁的向物联网平台获取或者刷新accessToken,物联网平台会报错。这其实也好理解,appId与secret是固定的,在物联网平台是存储在服务器中的,频繁的访问会让物联网平台不断的去数据库进行对比,一是增加了物联网平台业务处理时间与负担,二是你刚获取的accessToken可能已经比你同时访问物联网平台的其它任务给刷新了。
5、accessToken在过期前可以使用刷新token接口进行token的刷新
accessToken过期前必须要使用刷新接口对accessToken进行刷新,否则物联网平台将禁止带有过期accessToken的连接访问。
6、refreshToken的有效期为24小时
即使你的accessToken过期了,你也可以使用没有过期的refreshToken来刷新accessToken。
7、refreshToken也是唯一的
refreshToken每次刷新后都会变化,新获取的refreshToken有效期也是24小时。
基于本SDK的应用如何管理accessToken与refreshToken
1、如何存储
本SDK的鉴权与刷新token接口,直接向程序返回物联网平台返回的结果,您可以将获取的accessToken与refreshToken存储在自己应用的数据库、文件或者缓存中,在调用其他接口的时候直接取用。我们开发物联网应用系统的时候,一般使用redis数据库存储accessToken与refreshToken,借助redis的高速度与数据持久化特性,提高应用的效率。
2、何时刷新
建议在accessToken使用时间达到90%有效时间,也就是3600*0.9=3240秒的时候就去刷新accessToken,这样可以保证自己的应用一直能够获得有效的accessToken。
3、如何刷新
我们应保证在刷新accessToken的时候,没有线程已经取得了原来的accessToken并向物联网平台发起访问。因此我们应该在发起刷新accessToken的时候,禁止其他线程取用原来的accessToken;同时应用每次访问物联网平台,都应重新获取自己应用里存储的accessToken。这个问题在并发量不高的系统中,不用太在意,但是并发量高的时候,必须要注意。
4、注意事项
由于accessToken每次获取或者刷新都会变化,所以accessToken的获取与刷新接口不要并发使用。
