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 ...
随机推荐
- class12_pack_grid_place 放置位置
其中的部分运行效果图(程序见序号1): #!/usr/bin/env python# -*- coding:utf-8 -*-# ----------------------------------- ...
- luogu3384 /// 树链剖分+线段树模板
题目大意: https://www.luogu.org/problemnew/show/P3384 树链剖分的讲解 两个dfs() 修改 查询 很详细很好理解 https://www.cnblogs. ...
- git提交流程简述
1.初始化:一个项目只执行一次 只要有.git隐藏文件夹就ok了 git init 或者 git clone url 2.为远程github仓库生成别名(remote-name就是远程仓库的别名)这一 ...
- python ORM框架:SqlAlchemy
ORM,对象关系映射,即Object Relational Mapping的简称,通过ORM框架将编程语言中的对象模型与数据库的关系模型建立映射关系,这样做的目的:简化sql语言操作数据库的繁琐过程( ...
- 【JZOJ6273】欠钱
description analysis 读懂题就可知\(b\)的收益即为\(a\)到\(b\)这一条链上边权的最小值 那么就是动态维护一个森林,询问链上最小值,同时必须满足儿子走向父亲 明显\(LC ...
- 表单 用jquery做输入脱离焦点 进行正则验证
<!-- 账号登录块 --> <form class="form1" action="" method="get&quo ...
- 20175323《Java程序设计》第三周学习总结
教材学习内容总结 这周开始用幕布记录学习过程和思路,下面是我这章的知识框架总结https://mubu.com/doc/aNMW9Clym0 教材学习中的问题和解决过程 问题1:教材90页的Trian ...
- ECMAScript 2016,2017 和 2018 中所有新功能的示例
很难追踪 JavaScript(ECMAScript)中的新功能. 想找到有用的代码示例更加困难. 因此,在本文中,我将介绍 TC39 已完成 ES2016,ES2017 和 ES2018(最终草案) ...
- iServer添加Oracle Plus数据源、服务发布的问题
今天在将以Oracle Plus为数据源的工作空间发布成服务时,发现服务发布完后,看不见任何数据.最后发现,还需要在iserver服务器上安装oracle客户端才行.整理如下: 一.创建空间数据库账户 ...
- 用pymysql实现的注册登录公告练习
import pymysql #1.连接服务器 conn=pymysql.connect( host='127.0.0.1', port=3306, user='root', password='12 ...