一、背景说明
需求是这样滴:对物联网终端设备以及网关设备进行统一的管理,这里需要一个设备管理平台,同时呢,计划开放API,以供应用开发者调用API来管理控制设备。设备管理平台本身的用的是传统的session来管理,设备管理者数量并不多,所以不会有超量的session给服务器造成太大的压力。开放API给第三方应用用户是为了应对第三方用户开发的各种移动端app以及需要自身维护的设备管理。所以用session就不是那么合适,计划采取token的方式。
多年以前我用过token这种方式来开发,那时候似乎还没有jwt这个框架,我记得是根据用户名密码生成token后存在数据库中的,每次token进来是需要从数据库中或者提前缓存的token池中来找到匹配的token以确保不是非法请求。
闲话多了,看看正题。
二、JWT以及JJWT介绍
首先呢,我们可以通过这里来看看JWT是个什么样的东西:https://jwt.io/introduction/ 官方说的很清楚了,我就用我蹩脚的英文来给大家解释下:
1、什么是JSON Web Token?
JSON Web Token (JWT)是一个开放的标准(RFC 7519),它定义了一种简洁独立的方式,以JSON对象的形式在各方之间安全地传输信息。
2、什么时候使用JWT呢?
授权和信息交换的时候
3、JWT结构介绍
JWT说白了,就是一串字符串,包含三个部分,三部分之间用“.”来分割。三部分分别是:
- Header
- Payload
- Signature
最后形成的字符串就像这样:xxxxx.yyyyy.zzzzz
Header大概就是这样的:
{
"alg": "HS256",
"typ": "JWT"
}
payload就是放内容的,官方叫做claims,这个是啥玩意呢?这玩意是声明一些实体,包括jwt自己已经定义好的特色的声明,还有一些用户加上的声明(我们这些开发者想加上的)以及一些附加数据
这玩意有三种类型,分别是 registered, public, and private claims. Registered Claims就是官方已经定义了的,比如:iss (issuer), exp (expiration time), sub (subject), aud