专栏首页写代码和思考NodeJS 使用 jsonwebtoken 创建 JWT 格式的 token 和验证

NodeJS 使用 jsonwebtoken 创建 JWT 格式的 token 和验证

背景

在 NodeJS web server 项目上,我们需要做登录验证,通过 用户名和密码 换取 token 是常用的方式。

相关知识

JSON Web Token (JWT) 介绍

它是 一种 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不被接受;一般都会留一些余地,比如几分钟;,是否使用是可选的;

jsonwebtoken 介绍

它是 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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android网络访问库 - Retrofit学习(1)基础

    Retrofit是一个类型安全的HTTP客户端,支持Android和Java.它是Square公司开源的项目,当前版本2.0。

    zhangyunfeiVir
  • Linux 下按照 Nodejs 环境

    zhangyunfeiVir
  • Android开发(28) 绘制无限加载的温度曲线

    实现一个温度变化曲线 该曲线的数据时不断加载的,如下图。 支持手势,当不断向左拖动时,图形曲线要随着拖动移动,并在拖动到边界时需要加载更多数据。

    zhangyunfeiVir
  • 基于Python的开源量化交易平台及组件汇总

    vnpy [1] 基于python的开源交易平台开发框架。项目的用户包括:私募基金,证券自营、资管,期货公司,高校的金融研究院系,个人投资者等,机构用户加起来...

    Python中文社区
  • 人工智能取得突破后,机器可以在无人监督的情况下“光速”学习

    目前用于机器学习的处理器在执行复杂操作时,会受到处理数据所需的电力的限制,一般来说,任务越智能,数据就越复杂,对电力的需求就越大。

    大数据文摘
  • java基础学习_集合类03_用户登录注册案例(集合版)、Set集合、Collection集合总结_day17总结

    ============================================================================= ==...

    黑泽君
  • 资源 | R语言也能使用TensorFlow了!RStudio发布全新接口

    机器之心
  • 红队攻防之邮箱打点入口

    随着互联网信息快速发展,办公已经离不开网络的支持。邮箱成为了人们常用的办公方式之一。

    HACK学习
  • Spring Boot遇到的某些问题

    在spring整合thymeleaf模板后,页面中文将显示乱码,需要设置web.xml和springmvc-servlet.xml配置才能使中文不乱码。

    Dream城堡
  • 对话余凯:人工智能未来何在?深度学习+贝叶斯网络

    量子位 | 若朴 牧北 发自 亚布洛尼 2月的亚布力仍是一片冰雪世界。 上周,包括李彦宏、雷军、杨元庆、王石、冯仑、沈南鹏在内的一众企业家,齐聚这个东北小镇,共...

    量子位

扫码关注云+社区

领取腾讯云代金券