JWT用户认证体系
依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.0.0</version>
</dependency>
JWTUtil 工具包
public class JWTUtils {
//Edition是对象
public static String createJWT(Edition edition){
//声明签名的算法。 1.参数为密钥,注意密钥只能后端知晓,因为密钥泄露代表可以任意对生成的jwt串进行解密
Algorithm algorithm = Algorithm.HMAC256("secret");
//2.声明头部
Map map = new HashMap<>();
//声明加密算法
map.put("alg","HS256");
//声明类型 jwt 固定值
map.put("typ","JWT");
//3.声明载荷 并且创建出jwt串
String token = JWT.create()
//设置头部
.withHeader(map)
//载荷中的公共信息。签发人。任意填写即可
.withIssuer("test")
//载荷中的公共信息 受众,通常指用户
.withAudience("edition")
//载荷中的自定义信息。key:value的存储格式,任意存储内容。
.withClaim("editionSecretKey", edition.getEditionSecretKey())
.withClaim("catalogueVersions", edition.getCatalogueVersions())
// .withClaim("id", user.get("id").toString())
//使用定义好的签名算法
.sign(algorithm);
return token;
}
//判断秘钥是否存在
public static Boolean verifyToken(String token){
try {
Algorithm algorithm = Algorithm.HMAC256("secret"); //use more secure key
//创建jwt的解密对象
JWTVerifier verifier = JWT.require(algorithm)
//注意 解密的签发人要与加密的签发人保持一致
.withIssuer("test")
.build(); //Reusable verifier instance
//对token进行解密
DecodedJWT jwt = verifier.verify(token);
return true;
}catch (Exception e){
return false;
}
}
//把token秘钥里的catalogueVersions解密
public static Integer getCatalogueVersions(String token) {
//声明签名算法,注意:加密的密钥与解密的密钥保持一致,如果没有一致则无法解密
Algorithm algorithm = Algorithm.HMAC256("secret"); //use more secure key
//创建jwt的解密对象
JWTVerifier verifier = JWT.require(algorithm)
//注意 解密的签发人要与加密的签发人保持一致
.withIssuer("test")
.build(); //Reusable verifier instance
//对token进行解密
DecodedJWT jwt = verifier.verify(token);
//我们就可以从jwt中获取到自定义的用户名称
System.out.println("图书秘钥:"+jwt.getClaim("editionSecretKey").asString());
System.out.println("catalogueVersions:"+jwt.getClaim("catalogueVersions").asInt());
return jwt.getClaim("catalogueVersions").asInt();
}
}
JWT用户认证体系的更多相关文章
- DRF的JWT用户认证
目录 DRF的JWT用户认证 JWT的认证规则 JWT的格式 JWT认证的流程 JWT模块的导入为 JWT的使用 DRF的JWT用户认证 从根本上来说,JWT是一种开放的标准(RFC 7519), 全 ...
- [django]前后端分离之JWT用户认证
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- 前后端分离之JWT用户认证(转)
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- 前后端分离之JWT用户认证zf
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- [转] 前后端分离之JWT用户认证
[From] http://www.jianshu.com/p/180a870a308a 在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当 ...
- 前后端分离之JWT用户认证
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- Cookie、Session、Token那点事儿和前后端分离之JWT用户认证
(两篇文章转自:https://www.jianshu.com/p/bd1be47a16c1:https://www.jianshu.com/p/180a870a308a) 什么是Cookie? Co ...
- 用户认证(Authentication)进化之路:由Basic Auth到Oauth2再到jwt
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_98 用户认证是一个在web开发中亘古不变的话题,因为无论是什么系统,什么架构,什么平台,安全性是一个永远也绕不开的问题 在HTTP ...
- JWT 实现基于API的用户认证
基于 JWT-Auth 实现 API 验证 如果想要了解其生成Token的算法原理,请自行查阅相关资料 需要提及的几点: 使用session存在的问题: session和cookie是为了解决http ...
- 基于JWT标准的用户认证接口实现
前面的话 实现用户登录认证的方式常见的有两种:一种是基于 cookie 的认证,另外一种是基于 token 的认证 .本文以基于cookie的认证为参照,详细介绍JWT标准,并实现基于该标签的用户认证 ...
随机推荐
- 知识图谱demo net core + neo4j
知识图谱 基于neo4j数据库和.net core开发环境 Neo4j数据库的安装 安装neo4j数据库之前,需安装java的JDK文件,安装版本需与数据库保持一致,较新的neo4j数据库都需要至少j ...
- Jupyter + Miniconda + VsCode 学习利器
Jupyter + Miniconda + VsCode 学习利器 Jupyter Notebook 是基于网页的用于交互计算的应用程序. Miniconda 是一款小巧的python环境管理工具 提 ...
- git使用采坑-The project you were looking for could not be found 解决方式
清除本地git账户,重新输入用户名密码(最优) git config --system --unset credential.helper之后再进行git操作时,弹出用户名密码窗口,输入即可 详情如下 ...
- LoadRunner 常见错误
1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决. 启动浏览器,打开Inter ...
- 记录aop失效问题
例子:转账demo 使用技术:基于注解的方式实现,aop也是通过注解实现(Spring) 出现问题:aop已经写好,但是没有生效 原因:1.切入点是否正确(不是本问题) 2.基于注解方式实现,没有配置 ...
- usbip:(一)初识
USB/IP 总结 一.概要: USB/IP项目的目标是为用户提供通过网络远程访问usb设备的能力.在用户看来,访问usb设备和访问插入到本地电脑的设备没什么区别,该项目是开源的,可以用过适当的配 ...
- flutter json_serializable数据模型的建立和封装
为了方便数据使用,我们将服务器拿到的数据转换为map类型,但是在使用是大量的数据会让使用map时头大,比如每个map都key都需要手动输入,很是麻烦. 本文使用了json_serializable将m ...
- 在Unity3D中开发的Rim Shader
Swordmaster Rim Shaders 特点 本资源包共包含两种Rim效果的Shader (1)Rim Bumped Specular. (2)Rim StandardPBR(Metallic ...
- List一边插入数据后又移除数据
记录最简单的三种方法,直接上代码: List<String> list = new ArrayList<>(); list.add("1"); list.a ...
- Android studio Internet跳转活动
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...