在 NodeJS web server 项目上,我们需要做登录验证,通过 用户名和密码 换取 token 是常用的方式。
它是 一种 JSON 表达的 token 格式。一个 token 包含了三部分:header,payload,signature。
header 是 token 的一部分,用来存放 token 的类型和编码方式,通常是使用 base-64 编码。
payload 包含了信息。你可以存放任一种信息,比如用户信息,产品信息等。它们都是使用 base-64 编码方式进行存储。
signature 包括了 header,payload 和密钥的混合体。signature 必须安全地保存储在服务端。
官网介绍:https://tools.ietf.org/html/rfc7519
(Payload)说明
{ "iss": "Online JWT Builder",
"iat": 1416797419,
"exp": 1448333419,
"aud": "www.example.com",
"sub": "jrocket@example.com",
"GivenName": "Johnny",
"Surname": "Rocket",
"Email": "jrocket@example.com",
"Role": [ "Manager", "Project Administrator" ]
}
* iss: 该JWT的签发者,是否使用是可选的;
* sub: 该JWT所面向的用户,是否使用是可选的;
* aud: 接收该JWT的一方,是否使用是可选的;
* exp(expires): 什么时候过期,这里是一个Unix时间戳,是否使用是可选的;
* iat(issued at): 在什么时候签发的(UNIX时间),是否使用是可选的;其他还有:
* nbf (Not Before):如果当前时间在nbf里的时间之前,则Token不被接受;一般都会留一些余地,比如几分钟;,是否使用是可选的;
它是 JWT 的 NodeJS 的一种实现。
npm install jsonwebtoken
var jwt = require('jsonwebtoken');
const TokenUtil = {
sign: function(userName){
const payload = { userName };
var token = jwt.sign(payload, privateKey);
console.log(`token = ${token}`);
return token;
},
verify: function(token){
var decoded = jwt.verify(token, privateKey);
// console.log('decoded = '+decoded);
console.log('decoded = '+JSON.stringify(decoded));
},
main: function(){
let str = this.sign('zhang3');
this.verify(str);
}
}
官网地址:https://github.com/auth0/node-jsonwebtoken
https://github.com/auth0/node-jsonwebtoken https://tools.ietf.org/html/rfc7519 https://blog.csdn.net/github_35631540/article/details/83898056 http://www.cnblogs.com/xiekeli/p/5607107.html