JWT用户认证

原创
2020/10/14 00:07
阅读数 31

1. JWT简介

JWT全称是Json Web Token,它由三个部分组成:Header头部,Payload载荷,Signature签名。 基于Token的WEB后台登录认证机制

1.1 Header

头部:它一般由两个部分组成
typ 定义类型,值为JWT;
alg 定义JWT使用的加密算法
{
    "typ": "JWT",
    "alg": "HS256"  // 加密算法,默认值,也可以自定义为其他算法,例如md5等
}

需要对其进行Base64编码

String header = "{\"typ\":\"JWT\",\"alg\":\"HS256\"}";// 这里有一个坑:json字符串在写的时候不要留空格!
String s = Base64.getEncoder().encodeToString(header.getBytes("UTF-8"));
System.out.println(s);  // eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

1.2 Payload

载荷:它一般由一些官方提供的有具体含义的字段和自定义字段组成
{
    // 以下是官方提供的一些字段,有特殊的含义但这是非必须的
    "iss": "wxsatellite",  // 一般可以写JWT签发者
    "iat": 1652323456,   // 签发的时间
    "exp": 1652328456,   // JWT过期时间
    "aud": "三斤",  // 接收方
    "sub": "主题"  // JWT的主题
 
    // 以下是自定义的字段
    "uid": 1
}
String payload= "{\"iss\":\"wxsatellite\",\"iat\":1652323456,\"exp\":1652323456,\"aud\":\"三斤\",\"sub\":\"主题\",\"uid\":1}";
String s1 = Base64.getEncoder().encodeToString(payload.getBytes("UTF-8"));

1.3 Signature

签名:
由Header部分进行Base64编码得到的字符串拼接上    s1
"."
再拼接上Payload部分进行Base64编码得到的字符串, s2
以上三部分拼接得到的字符串再经过Header头部中定义的alg加密算法得到的字符串就是签名。需要注意的是:加密的时候需要加上盐,提高安全性。具体的公式:HMACSHA256( Base64(Header) + "." + Base64(Payload) + "服务端的密码盐" )。 s3

得到上面三部分(s1、s2、s3)之后,再用点进行拼接,得到的字符串就是JWT了
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部