JWT token生成原理
token生成规则:
JWT包含三部分:Header(头部),Payload(负载),Signature(签名)
//Signature生成
var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);
//通过header中声明的加密方式进行加盐secret组合加密
var signature = HMACSHA256(encodedString, secret);//token生成,用.连接三部分组成一个完整的字符串
var token=base64UrlEncode(header)+'.'+base64UrlEncode(payload)+'.'+signature;
token生成工具依赖包:com.auth0:java-jwt:3.9.0
基于生成规则,token生成
private static String manualToken(String secret) throws JsonProcessingException {ObjectMapper mapper=new ObjectMapper();//生成headerMap<String,String> header=new HashMap<>();header.put("alg","HS256");header.put("typ","JWT");byte[] headerBytes = mapper.writeValueAsBytes(header);String headerPart = new String(Base64.encodeBase64(headerBytes,false ,true), StandardCharsets.US_ASCII);//生成playload,存放传递信息Map<String,String> mapPlayload=new HashMap<>();mapPlayload.put("appId","appId");mapPlayload.put("phone","phone");byte[] payloadBytes = OBJECT_MAPPER.writeValueAsBytes(mapPlayload);String payloadPart = new String(Base64.encodeBase64(payloadBytes,false ,true), StandardCharsets.UTF_8);//生成signatureString content = headerPart + "." + payloadPart;Mac mac = HmacUtils.getInitializedMac(HmacAlgorithms.HMAC_SHA_256, secret.getBytes(StandardCharsets.UTF_8));byte[] output = mac.doFinal(content.getBytes(StandardCharsets.UTF_8));String signaturePart = new String(Base64.encodeBase64(output, false ,true), StandardCharsets.UTF_8);String token=headerPart+"."+payloadPart+"."+signaturePart;return token;}
依赖包,token生成代码:
private static String getToken(String secret){String appId="appId";String phone="phone";String token= JWT.create().withClaim("appId",appId).withClaim("phone",phone).sign(Algorithm.HMAC256(secret));return token;}
token解析代码:
private static void getInfo(String token,String secret){HashMap<String,String> map=new HashMap<>();DecodedJWT jwt=JWT.require(Algorithm.HMAC256(secret)).build().verify(token);String appId=jwt.getClaim("appId").asString();String phone=jwt.getClaim("phone").asString();log.info("appId is {}",appId);log.info("phone is {}",phone);}
JWT token生成原理相关推荐
- ASP.NET Core 自动刷新JWT Token
为了安全性考虑,我们可以设置JWT Token较短的过期时间,但是这样会导致客户端频繁地跳到登录界面,用户体验不好. 正常解决办法是增加refresh_token,客户端使用refresh_token ...
- 【FastAPI后台API 八】JWT token认证登陆
JWT token认证登陆 前一篇博客讲述了获取和验证请求参数, 这一篇就实践下,演示一个最基础的JWT认证,我公司是用了两个token方式验证,一个请求token,一个刷新token,请求token ...
- pki token 生成java,全网最简单的k8s User JWT token管理器
概述 kubernetes server account的token很容易获取,但是User的token非常麻烦,本文给出一个极简的User token生成方式,让用户可以一个http请求就能获取到. ...
- JWT Token在线编码生成
JWT Token在线编码生成 JWT Token在线编码生成 JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案.本工具提供在线编码的功能 JSON Web Token(缩写 ...
- jwt token注销_JWT生成token及过期处理方案
## 业务场景 在前后分离场景下,越来越多的项目使用token作为接口的安全机制,APP端或者WEB端(使用VUE.REACTJS等构建)使用token与后端接口交互,以达到安全的目的.本文结合sta ...
- 在springboot中使用JWT自定义生成Token信息,接口请求时校验Token(在Shiro基础上)
前言 项目原有使用的是 springboot + shiro 的环境,后来由于应用要与OA对接单点登录,所以在原有基础上,修改成使用JWT自定义生成token信息和校验token功能. 实现思路 1. ...
- ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露
一.前言 在涉及到后端项目的开发中,如何实现对于用户权限的管控是需要我们首先考虑的,在实际开发过程中,我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能,而在 Grapefruit.VuCore ...
- jwt token 太长_理解 JWT 鉴权的应用场景及使用建议
JWT 介绍 JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-contained)的方式,用于在各方之间以JSON对象 ...
- jwt token 附加用户信息_JWT的正确使用方法,API开发为什么使用JWT
API开发越来越成为主流,需要各自Access Token做登录状态. 甚至目前web端mvvm应用,如angular.vue.react都使用了jwt方式,也就是不再使用cookie和session ...
最新文章
- Virtex-6中的SelectIO模块
- alpine安装启动mysql_在php5-fpm-alpine docker容器中安装php-gd依赖于alpine linux
- 【转】C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
- 第五章 编写主引导扇区代码
- Keepalived配置文件详解
- .NET串口通讯解决方案
- 软件工程复习提纲——第三章
- 判断成绩linux程序编程,程序输入输出 ,编写判断成绩的程序
- IDEA控制台输出中文乱码的问题及解决方案
- leetcode—9.分离双指针题型python解答
- iphone,ipad尺寸汇总
- 使用tornado的异步非阻塞
- SpringSecurity自定义多Provider时提示No AuthenticationProvider found for问题的解决方案与原理(一)
- Android—Surface,BufferQueue
- WIN10 本地打印机没有“打印机属性”
- u3d android 优化
- VideoProc for mac(全能视频处理软件)
- info在python中的意思_为什么我没有在python中收到日志INFO消息?
- 【Web】HTML 账号注册页面
- 【HTML基础】HTML的基本结构