16 - JWT

作者: Elvmx | 来源:发表于2019-01-23 08:57 被阅读318次

参考阮一峰大神文档

简介

JWT (JSON Web Token) 是目前最流行的跨域认证解决方案。

做什么用的

用来做用户认证的,判断请求是否可信之类。

基础流程

  1. 用户登录验证通过后,后台签发一个 jwt。并返回给前端。
  2. 后续,用户与服务器的通信,都需要加上这个 jwt 数据(一般写在请求头中),后台代码依靠这个数据来做用户的认证。
Authorization: Bearer <token>

JWT 的组成

jwt 一般长成下面这个样子:

长啥样

由三个部分组成,各个部分通过 "." 分割开:

  1. Header (头部)
  2. Payload (负载)
  3. Signature (签名)

Header

Header 主要描述 JWT 的元信息。

Header

alg属性表示签名的算法。默认是 HMAC SHA256 (写成 HS256)
typ属性表示令牌的类型。jwt 令牌统一写成 jwt

Payload

Payload 里面就是存储的数据

Payload

Signature

Signature 部分是对前两部分的签名,防止数据篡改。

Signature

JWT 的特点

  1. JWT 默认是不加密的,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。
  2. JWT 不加密的情况下,不能将秘密数据写入 JWT。
  3. JWT 不仅可以用于认证,也可以用于交换信息。有效使用 JWT,可以降低服务器查询数据库的次数。
  4. JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。
  5. JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。
  6. 为了减少盗用,JWT 不应该使用 HTTP 协议明码传输,要使用 HTTPS 协议传输。

基于 NodeJS 的 jwt 创建与验证

1. 安装 jsonwebtoken

npm install jsonwebtoken --save

2. 创建与签发

// test.js
const jwt = require('jsonwebtoken');

const payload = {
  name: 'zhangsan',
  admin: true
}

const secret = 'MY_GOOD';

const token = jwt.sign(payload, secret);
console.log(token);

运行上面的 js 文件会得到的字符串就是创建出来的jwt。返回给前端即可。

3. 验证与解码

// test.js
const jwt = require('jsonwebtoken');

const payload = {
  name: 'zhangsan',
  admin: true
}

const secret = 'MY_GOOD';

const token = jwt.sign(payload, secret);
console.log(token);

jwt.verify(token, secret, (error, data) => {
  if (error) {
    console.log(error.message);
    return;
  }
           
  console.log(data);
})

相关文章

  • 16 - JWT

    参考阮一峰大神文档 简介 JWT (JSON Web Token) 是目前最流行的跨域认证解决方案。 做什么用的 ...

  • JsonWebToken

    JWT (JsonWebToken) JWT官网['https://jwt.io/'] JWT简介 1.JWT(J...

  • JWT介绍和使用

    最权威网址 JWT官网: https://jwt.io/ 什么是JWT Json web token (JWT),...

  • JWT实现token验证

    JWT官网:https://jwt.io/[https://jwt.io/] JWT(Java版)的github地...

  • 使用RSA公私钥实现JWT令牌的签名和验签

    使用RSA公私钥实现JWT令牌的签名和验签 1、什么是JWT令牌 JWT基本概念可从JWT[https://jwt...

  • JWT Spring-security

    JWT设计原理 JWT结合spring-security在项目中的应用 JWT[https://jwt.io/in...

  • JWT的介绍解析

    JWT的介绍解析 一、什么是JWT?了解JWT,认知JWT 首先jwt其实是三个英语单词JSON Web Toke...

  • JWT、SWT、SAML

    一、 JWT from:https://jwt.io/introduction[https://jwt.io/in...

  • jwt 在微服务中应用

    jwt token jwt 在api 方式中表中的token生成,验证以及获取jwt解密后携带的用户信息 jwt ...

  • FusionAuth JWT

    本文介绍基于 FusionAuth JWT 的 JWT 实现方法。 目录 FusionAuth JWT 简介 代码...

网友评论

    本文标题:16 - JWT

    本文链接:https://www.haomeiwen.com/subject/fipdjqtx.html