zoukankan      html  css  js  c++  java
  • 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;
    }
    
    
    

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

    生成方法(mac os系统亲测可以):

    打开命令行工具,输入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的默认的算法)
      不需要公钥私钥。
      
    jwt.sign()方法只要不写algorithms项目,就是默认的HMAC SHA256算法。
     
  • 相关阅读:
    已知: 每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 一箱油可供一架飞机绕地球飞半圈,问题:为使至少一架飞机绕地球一圈回到起飞时的飞机
    简易vector的实现
    简单的内存池实现
    归并排序,递归与非递归
    堆排序
    位运算
    二叉树的建立,以及非递归遍历
    “云端融合”思想的自我摸索(很不靠谱)
    linux android开发环境搭建
    Android系统架构及内核简介
  • 原文地址:https://www.cnblogs.com/xiaochongchong/p/9009596.html
Copyright © 2011-2022 走看看