jsonwentoken也经常被叫做 "jwt"。
它的存在主要是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
基于token的鉴权机制
基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。
当我们写项目的时候,采用前后端分离的方式,session和cookie已经满足不了我们的需求了,它们不能安全储存用户的信息了。所以就只能找其他方式来存储信息,而jsonwebtoken就比较适合这样的场景。
我是使用nodejs,所以下载jsonwebtoken工具包比较方便。
npm install jsonwebtoken --save
var jwt = require('jsonwebtoken');
我一般的使用流程:
当用户登录的时候,就把用户信息在服务端通过jsonwebtoken进行加密生成token,
var token = jwt.sign({ data: 'userinfo' }, 'secret', { expiresIn: '1h' );
然后把token返回给浏览器,然后用户每次进行操作的时候,可以把token通过请求头传服务端,服务端来验证token是否正确,
var decoded = jwt.verify(token, 'secret');
注意:
token一般是在请求头里加入Authorization,并加上Bearer标注:
fetch('api/user/1', { headers: {'Authorization':'Bearer '+ token }})
这个token必须要在每次请求时传递给服务端,它应该保存在请求头里, 另外,服务端要支持CORS(跨来源资源共享)策略,一般我们在服务端这么做就可以了Access-Control-Allow-Origin: *。
网友评论