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 ...
随机推荐
- [02]APUE:POSIX 正则库(#include <regex.h>)
正则匹配流程: 声明一个 regex_t 类型的变量(结构体) regcomp 函数会将“正则匹配条件”写入此结构体,并编译成特定的二进制格式(加快匹配速度) 声明一个 regmatch_t 类型的变 ...
- 火狐不支持webp格式的图片
<!DOCTYPE html> <html lang="en"> <style> ul{list-style: none;} li{float: ...
- 3.2_springBoot2.1.x检索之JestClient操作ElasticSearch
这里介绍Jest方式交互, 导入jest版本 <!--导入jest--> <dependency> <groupId>io.searchbox</groupI ...
- scrapy的使用-LinkExtractor
背景: 在爬取网站信息是需要获取特定标签下的某些内容,就需要获取这些标签下的链接,如果获取每一个,在通过这个获取它下面的信息,这样效率会很低,时间复杂度O(n^2),但如果先获取链接,再获取内容,则时 ...
- JS对象 神奇的Math对象,提供对数据的数学计算。注意:Math 对象是一个固有的对象,无需创建它,直接把 Math 作为对象使用就可以调用其所有属性和方法。这是它与Date,String对象的区别
Math对象 Math对象,提供对数据的数学计算. 使用 Math 的属性和方法,代码如下: <script type="text/javascript"> var m ...
- Photoshop基本操作
PS 工具是我们使用频率比较高的软件之一, 我们学习PS目的不是为了设计海报做电商和UI的,而是要求: 会简单的抠图 会简单的修改PSD效果图 熟练的切图 能和网站美工美眉有共同话题..... Pho ...
- MYSQL - database 以及 table 的增删改查
MYSQL - database 以及 table 的增删改查 MySQL的相关概念介绍 MySQL 为关系型数据库(Relational Database Management System), 这 ...
- php算法题---连续子数组的最大和
php算法题---连续子数组的最大和 一.总结 一句话总结: 重要:一定要本机调试过了再提交代码,因为很容易出现考虑不周的情况,或者修改了之后没有考虑修改的这部分 利用空间来换时间,或者利用空间来换算 ...
- 10 行 Python 代码实现模糊查询/智能提示
10 行 Python 代码实现模糊查询/智能提示 1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的 ...
- JS 变量的数据类型转换
变量的类型转换,一般情况是JS自动转换的,但也有些时候需要手动转换. 1.其它类型转成布尔型 函数和方法的区别 Boolean(a) //函数是可以独立使用的 document.write(a) ...