JWT生成token
1.JWT简介
JSON Web Token 简称JWT。
一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。
JWT生成的token是这样的
2.Json Web Token(JWT)生成的Token好处:
- 安全性比较高,加上密匙加密而且支持多种算法。
- 携带的信息是自定义的,而且可以做到验证token是否过期。
- 验证信息可以由前端保存,后端不需要为保存token消耗内存
生成的token,是3段,用.连接。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJxd2VydHkiLCJpZCI6IjAwNyIsImV4cCI6MTU1OTAzODE0MywiaWF0IjoxNTU5MDM1NzQzLCJhZ2UiOiIyMiIsInVzZXJuYW1lIjoi5rGk5aeGIn0.r4-H9Qmz4IP2OWk-waPjgXkc7j_rsMlyuQaUrtTrNHk
3.Java代码
package com.utils.jwt; import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm; import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; public class Test1 { public static final String API_SECRET = "123456";
public static final String API_KEY = "qwerty"; public static void main(String[] args) throws UnsupportedEncodingException {
String token = createToken(null);
System.out.println("下面是token");
System.out.println(token); } /**
* @description 创建token
* @author Colo.Zhu
* @time 2018/4/8 14:37
*/
public static String createToken(Object object) throws UnsupportedEncodingException { /**
* 头部信息
* 用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。
* 下面的headMap用于存放头部信息
* */
Map<String, Object> headMap = new HashMap(); //头部信息
headMap.put("alg", "HS256");
headMap.put("typ", "JWT"); Algorithm algorithm = Algorithm.HMAC256(API_SECRET); //用公共密钥加密 long currentTimeMillis = System.currentTimeMillis();
Date issuedAtDate = new Date(currentTimeMillis); //设置签发时间
Date expiresAtDate = new Date(currentTimeMillis + 40 * 60 * 1000); //设置过期时间,大于签发时间 /**
* 载荷
* 其实就是自定义的数据,一般存储用户Id,过期时间等信息。
* 也就是JWT的核心所在,因为这些数据就是使后端知道此token是哪个用户已经登录的凭证。
* 而且这些数据是存在token里面的,由前端携带,所以后端几乎不需要保存任何数据。
*
*/ /**
*
* 签名 (sign)
* 签名其实就是:
* 1.头部和载荷各自base64加密后用.连接起来,然后就形成了xxx.xx的前两段token。
* 2.最后一段token的形成是,前两段加入一个密匙用HS256算法或者其他算法加密形成。
* 所以token3段的形成就是在签名处形成的。
*/ //生成Token:
// eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJxd2VydHkiLCJpZCI6IjAwNyIsImV4cCI6MTU1OTAzODE0MywiaWF0IjoxNTU5MDM1NzQzLCJhZ2UiOiIyMiIsInVzZXJuYW1lIjoi5rGk5aeGIn0.r4-H9Qmz4IP2OWk-waPjgXkc7j_rsMlyuQaUrtTrNHk String token = JWT.create().withHeader(headMap)
.withIssuer(API_KEY)
.withClaim("name", "tom")
.withClaim("age", "22")
.withClaim("id", "007")
.withClaim("username", "汤姆")
.withIssuedAt(issuedAtDate)
.withExpiresAt(expiresAtDate)
.sign(algorithm); //签名 return token;
}
}
4..pom.xml
本例主要引入com.auth0.jwt包
<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.8.0</version>
</dependency>
5.签名
* 签名其实就是:
* 1.头部和载荷各自base64加密后用.连接起来,然后就形成了xxx.xx的前两段token。
* 2.最后一段token的形成是,前两段加入一个密匙用HS256算法或者其他算法加密形成。
* 所以token3段的形成就是在签名处形成的。

参考出处:https://www.jianshu.com/p/75208a68c3b9
JWT生成token的更多相关文章
- 国服最强JWT生成Token做登录校验讲解,看完保证你学会!
转载于:https://blog.csdn.net/u011277123/article/details/78918390 Free码农 2017-12-28 00:08:02 JWT简介 JWT(j ...
- 利用jwt生成token,用于http请求身份验证
前段时间在做移动端接口过程中,考虑到安全性,所有移动端发送请求(除了登录请求)过程中进行token有效验证. 1.利用jwt生成token a.导入jwt相关包 <!-- jwt --> ...
- 使用 JWT 生成 Token 代码示例
JSON Web Token,简称 JWT, 是一个开放的标准(RFC 7519),它定义了以一种紧凑的.自包含的 JSON 对象在各方之间安全传输信息的方式.该信息含有数字签名,可以被验证和信任. ...
- Token_使用JWT生成token
1.token三部分 header { "typ": "JWT", "alg": "HS256" } paylo ...
- JWT生成token及过期处理方案
业务场景 在前后分离场景下,越来越多的项目使用token作为接口的安全机制,APP端或者WEB端(使用VUE.REACTJS等构建)使用token与后端接口交互,以达到安全的目的.本文结合stacko ...
- tp5使用jwt生成token,做api的用户认证
首先 composer 安装 firebase/php-jwt github:https://github.com/firebase/php-jwt composer require firebas ...
- .NET6 JWT(生成Token令牌)
一.Net 6环境下的.net core项目里如何使用JWT. 第一步,在Nuget引入JWT.Microsoft.AspNetCore.Authentication.JwtBearer这两个NuGe ...
- JWT生成Token做登录校验
一.JWT的优点 1.服务端不需要保存传统会话信息,没有跨域传输问题,减小服务器开销. 2.jwt构成简单,占用很少的字节,便于传输. 3.json格式通用,不同语言之间都可以使用. 二.使用JWT进 ...
- JSON Web Token (JWT)生成Token及解密实战。
昨天讲解了JWT的介绍.应用场景.优点及注意事项等,今天来个JWT具体的使用实践吧. 从JWT官网支持的类库来看,jjwt是Java支持的算法中最全的,推荐使用,网址如下. https://githu ...
随机推荐
- Linux_磁盘分区、挂载、查看
一.挂载 1.查看设备的挂载情况 lsblk或lsblk -f 2.挂载 需求 :给我们的Linux系统增加一个新的硬盘,并且挂载到/home/newdisk 说明:我们以增加一块硬盘为例来熟悉一下磁 ...
- arr = map(float,arr)输出问题
代码: arr = ['22','44','66','88']arr = map(float,arr)print(arr) 输出: <map object at 0x000001B48C30EE ...
- 神经网络中使用Batch Normalization 解决梯度问题
BN本质上解决的是反向传播过程中的梯度问题. 详细点说,反向传播时经过该层的梯度是要乘以该层的参数的,即前向有: 那么反向传播时便有: 那么考虑从l层传到k层的情况,有: 上面这个 便是问题所在.因为 ...
- Git的故事
目录 Git Git的概念 Git的安装 Git的配置 Git的指令 Git Git的概念 首先我们要知道git是什么,最根本的概念是版本控制,顾名思义,就是git可以帮助我们控制自己写的代码或者文档 ...
- Python+Django+ansible playbook自动化运维项目实战✍✍✍
Python+Django+ansible playbook自动化运维项目实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受 ...
- Substring UVA - 11468 AC自动机+概率DP
题意: 给出一些字符和各自对应的选择概率,随机选择L次后得到一个长度为L的随机字符串S. 给出K个模板串,计算S不包含任何一个模板串的概率 dp[i][j]表示走到AC自动机 i 这个节点 还需要走 ...
- springcloud(十六):服务网关 zuul 快速入门
服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.Spring Cloud Netflix中 ...
- arm-linux-copydump 的使用
生成可以执行的 2 进制代码 [arm@localhost gcc]#armlinuxcopydump O binary hello hello.bin
- Python连接数据库流行用到的第三方库
Python连接数据库流行用到的第三方库: mysqldb:只支持Python2.x mysqlclient : mysqldb的衍生版本,完全兼容mysqldb,同时支持Python3.x,安装较复 ...
- Jupyter notebook文件默认存储路径以及更改方法
1.文件默认存储路径怎么查? 安装Anaconda后,新建文件的默认存储路径一般在C系统盘,那么路径是什么呢? 首先,新建一个.ipynb文件, 输入以下脚本,运行出的结果即是当前jupyter文件 ...