node jsonwebtoken

Posted 小虫虫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node jsonwebtoken相关的知识,希望对你有一定的参考价值。


 jsonwebtoken是node版本的JWT(JSON Web Tokens)的实现。
1.什么是JWT?
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
传统的认证用户信息是用cookie-session,JWT可以更好的实现一站式登录。
JWT的构成:第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature)。这3者是有关系的(请google),中间用.分割。
例子:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
2.jsonwebtoken的使用方法:
1)RSA SHA256算法:
 
import fs from ‘fs‘;
import path from ‘path‘;
const jwt = require(‘jsonwebtoken‘);

//生成token的方法
//data是保存的数据,例子:let data={uid:1}
function  generateToken(data){
    let created = Math.floor(Date.now() / 1000);
    let cert = fs.readFileSync(path.join(__dirname, ‘../config/rsa_private_key.pem‘));//私钥
    let token = jwt.sign({
        data,
        exp: created + 3600 * 24
    }, cert, {algorithm: ‘RS256‘});
    return token;
}

//验证token,最后的res。
// 上面的生成方法,我们得到res.uid=1
function verifyToken(token){
    console.log(‘进入验证‘);
    let cert = fs.readFileSync(path.join(__dirname, ‘../config/rsa_public_key.pem‘));//公钥
    console.log(cert);
    let res;
    try{
        let result = jwt.verify(token, cert, {algorithms: [‘RS256‘]}) || {};
        let {exp = 0} = result,current = Math.floor(Date.now()/1000);
        if(current <= exp){
            res = result.data || {};
        }
    }catch(e){
        console.log(e);
    }
    return res;
}

这种用法是要私钥和公钥文件的。

生成方法:

打开命令行工具,输入openssl,打开openssl;
生成私钥:genrsa -out rsa_private_key.pem 2048
生成公钥: rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
2)HMAC SHA256算法(jsonwebtoken的默认的算法)
  不需要公钥私钥。
  sign方法只要不写
algorithms项目,就是默认的HMAC SHA256算法。
 












以上是关于node jsonwebtoken的主要内容,如果未能解决你的问题,请参考以下文章

关于node,node-sass,sass-loader版本

Node.js 入门

Node学习—运行node服务demo

10.DOM

node.js教程基础:node.js命令行选项

bindings.node' 是针对不同的 Node.js 版本使用 NODE_MODULE_VERSION 93 编译的。此版本的 Node.js 需要 NODE_MODULE_VERSION 89