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生成原理相关推荐

  1. ASP.NET Core 自动刷新JWT Token

    为了安全性考虑,我们可以设置JWT Token较短的过期时间,但是这样会导致客户端频繁地跳到登录界面,用户体验不好. 正常解决办法是增加refresh_token,客户端使用refresh_token ...

  2. 【FastAPI后台API 八】JWT token认证登陆

    JWT token认证登陆 前一篇博客讲述了获取和验证请求参数, 这一篇就实践下,演示一个最基础的JWT认证,我公司是用了两个token方式验证,一个请求token,一个刷新token,请求token ...

  3. pki token 生成java,全网最简单的k8s User JWT token管理器

    概述 kubernetes server account的token很容易获取,但是User的token非常麻烦,本文给出一个极简的User token生成方式,让用户可以一个http请求就能获取到. ...

  4. JWT Token在线编码生成

    JWT Token在线编码生成 JWT Token在线编码生成 JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案.本工具提供在线编码的功能 JSON Web Token(缩写 ...

  5. jwt token注销_JWT生成token及过期处理方案

    ## 业务场景 在前后分离场景下,越来越多的项目使用token作为接口的安全机制,APP端或者WEB端(使用VUE.REACTJS等构建)使用token与后端接口交互,以达到安全的目的.本文结合sta ...

  6. 在springboot中使用JWT自定义生成Token信息,接口请求时校验Token(在Shiro基础上)

    前言 项目原有使用的是 springboot + shiro 的环境,后来由于应用要与OA对接单点登录,所以在原有基础上,修改成使用JWT自定义生成token信息和校验token功能. 实现思路 1. ...

  7. ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露

    一.前言 在涉及到后端项目的开发中,如何实现对于用户权限的管控是需要我们首先考虑的,在实际开发过程中,我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能,而在 Grapefruit.VuCore ...

  8. jwt token 太长_理解 JWT 鉴权的应用场景及使用建议

    JWT 介绍 JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-contained)的方式,用于在各方之间以JSON对象 ...

  9. jwt token 附加用户信息_JWT的正确使用方法,API开发为什么使用JWT

    API开发越来越成为主流,需要各自Access Token做登录状态. 甚至目前web端mvvm应用,如angular.vue.react都使用了jwt方式,也就是不再使用cookie和session ...

最新文章

  1. Virtex-6中的SelectIO模块
  2. alpine安装启动mysql_在php5-fpm-alpine docker容器中安装php-gd依赖于alpine linux
  3. 【转】C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
  4. 第五章 编写主引导扇区代码
  5. Keepalived配置文件详解
  6. .NET串口通讯解决方案
  7. 软件工程复习提纲——第三章
  8. 判断成绩linux程序编程,程序输入输出 ,编写判断成绩的程序
  9. IDEA控制台输出中文乱码的问题及解决方案
  10. leetcode—9.分离双指针题型python解答
  11. iphone,ipad尺寸汇总
  12. 使用tornado的异步非阻塞
  13. SpringSecurity自定义多Provider时提示No AuthenticationProvider found for问题的解决方案与原理(一)
  14. Android—Surface,BufferQueue
  15. WIN10 本地打印机没有“打印机属性”
  16. u3d android 优化
  17. VideoProc for mac(全能视频处理软件)
  18. info在python中的意思_为什么我没有在python中收到日志INFO消息?
  19. 【Web】HTML 账号注册页面
  20. 【HTML基础】HTML的基本结构

热门文章

  1. 数据仓库之电商数仓-- 3.3、电商数据仓库系统(DWT层)
  2. Spring Batch 批量处理策略
  3. Linux服务器配置秘钥对连接
  4. 优化就是在和时间赛跑
  5. visualvm安装插件
  6. Linux基本命令解析(1)
  7. 搜狗浏览器下 禁止浏览器自动填写用户名、密码
  8. C#中哈希表(HashTable)的用法详解
  9. maya2015 改变界面语言
  10. 解决RabbitMQ service is already present - only up...