jwt生成和解密-jose4j
jwt生成和解密-jose4j
jwt的概念和生成意义在这里就不描述了,百度能搜到很多,直接上代码
官网地址
https://bitbucket.org/b_c/jose4j/wiki/Home
maven
<dependency><groupId>org.bitbucket.b_c</groupId><artifactId>jose4j</artifactId><version>0.9.3</version></dependency>
生成jwt 地址
RsaJsonWebKey rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048);rsaJsonWebKey.setKeyId("k1");JwtClaims claims = new JwtClaims();claims.setIssuer("xizi");claims.setAudience("allUser");claims.setExpirationTimeMinutesInTheFuture(1);claims.setGeneratedJwtId();claims.setIssuedAtToNow();claims.setNotBeforeMinutesInThePast(1);claims.setSubject("admin");claims.setClaim("home", "喜子开发平台");String[] claim = {"group", "admin"};claims.setStringListClaim("group", Arrays.asList(claim));JsonWebSignature jws = new JsonWebSignature();jws.setPayload(claims.toJson());jws.setKey(rsaJsonWebKey.getPrivateKey());jws.setKeyIdHeaderValue(rsaJsonWebKey.getKeyId());jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_PSS_USING_SHA256);String jwt = jws.getCompactSerialization();log.info("jwt {}", jwt);toByte(rsaJsonWebKey.getKey());
注意最后的这个代码是为了生成公钥的,一会用来验证,否则不会验证成功的,此处先保存到本地
toByte(rsaJsonWebKey.getKey());
校验代码
String jwt = "eyJraWQiOiJrMSIsImFsZyI6IlBTMjU2In0.eyJpc3MiOiJ4aXppIiwiYXVkIjoiYWxsVXNlciIsImV4cCI6MTY4MTM5Mjg4MCwianRpIjoicFpSbGxubC11aDUxal9RS3ctZ1RBdyIsImlhdCI6MTY4MTM5MjgyMCwibmJmIjoxNjgxMzkyNzYwLCJzdWIiOiJhZG1pbiIsImVtYWlsIjoiYmozNTczNDkxQHNpbmEuY29tIiwiZ3JvdXAiOlsiZ3JvdXAiLCJhZG1pbiJdfQ.R2gGhlcuXtNLp5f-u_GAobh_XXLHUH0IC_QdVGEmxlnbhlY0gjPLeeb8w1aAQvJ1Y7VqCd-flYR2GxHa2M0LAbpyR_8S5jCZTTnznH0GrsBUcvJY8oEEHwny3fOAVMmAj8ms840qbeNz4Ib9i1w_zQten7hEXAU-6fhD9cKms6ji5tglu9p5nYaF0ugbcyi41kDAUqjDtCTncskEXiifgwAkbDeWADzRSmtVm0MwjT_xBu1dqDYMbPnz0jHHraL-67e0cfTurEKhjQiOZ6DjGQsusMcjlhRzD2CwPPULAHQQcwODld87nlmBI8SxnjqmA8iIMvTX2ZQbas_YI98Xtg";RsaJsonWebKey rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048);rsaJsonWebKey.setKeyId("k1");JwtConsumer jwtConsumer = new JwtConsumerBuilder().setRequireExpirationTime() // the JWT must have an expiration time.setAllowedClockSkewInSeconds(1) // allow some leeway in validating time based claims to account for clock skew.setRequireSubject() // the JWT must have a subject claim.setExpectedIssuer("xizi") // whom the JWT needs to have been issued by.setExpectedAudience("allUser") // to whom the JWT is intended for.setVerificationKey(read()) // verify the signature with the public key.setJwsAlgorithmConstraints( // only allow the expected signature algorithm(s) in the given contextAlgorithmConstraints.ConstraintType.PERMIT, AlgorithmIdentifiers.RSA_PSS_USING_SHA256) // which is only RS256 here.build(); // create the JwtConsumer instancetry {// Validate the JWT and process it to the ClaimsJwtClaims jwtClaims = jwtConsumer.processToClaims(jwt);log.info("JWT validation succeeded! {}" ,jwtClaims.toJson());} catch (InvalidJwtException e) {log.error("Invalid JWT! {}", e.getMessage());if (e.hasExpired()) {log.error("JWT expired at {}" ,e.getJwtContext().getJwtClaims().getExpirationTime());}if (e.hasErrorCode(ErrorCodes.AUDIENCE_INVALID)) {log.error("JWT had wrong audience: {}" + e.getJwtContext().getJwtClaims().getAudience());}}
基本就是摘抄的官网的,大家可以去官网看看
此处就看可以看到验证成功还是失败了
注意这个方法 read()) 是为了读取上个方法存的公钥
下面是存公钥 和读公钥的方法,实际项目中不用这个存,这个就是为了测试用用
public void toByte(Key key) throws IOException {FileOutputStream out = new FileOutputStream("key");ObjectOutputStream oo = new ObjectOutputStream(out);oo.writeObject(key);oo.flush();oo.close();}public Key read() throws IOException, ClassNotFoundException {ObjectInputStream in = new ObjectInputStream(new FileInputStream("key"));Key key = (Key) (in.readObject());in.close();return key;}
最后
生成的jwt可以到这个网站测试一下
网址 https://jwt.io/
jwt生成和解密-jose4j相关推荐
- jwt 私钥_JSON Web Token (JWT)生成Token及解密实战。
昨天讲解了JWT的介绍.应用场景.优点及注意事项等,今天来个JWT具体的使用实践吧. 从JWT官网支持的类库来看,jjwt是Java支持的算法中最全的,推荐使用,网址如下. 下面来看看如何使用jjwt ...
- JSON Web Token (JWT)生成Token及解密实战
转载自 JSON Web Token (JWT)生成Token及解密实战 昨天讲解了JWT的介绍.应用场景.优点及注意事项等,今天来个JWT具体的使用实践吧. 从JWT官网支持的类库来看,jjwt是J ...
- JWT生成Token做登录校验讲解
Free码农 2017-12-28 00:08:02 JWT简介 JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准. JWT的声明一般被用来在身份 ...
- 接口使用jwt返回token_Java中使用JWT生成Token进行接口鉴权实现方法
先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...
- java 接口鉴权_安全|Java中使用JWT生成Token进行接口鉴权实现
先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...
- java 接口 token_Java中使用JWT生成Token进行接口鉴权实现方法
先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...
- 国服最强JWT生成Token做登录校验讲解,看完保证你学会!
JWT简介 JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准. JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从 ...
- JWT生成Token及解析Token
JWT生成Token详解 [第一部分]历史文章: SpringBoot总结(一)--第一个SpringBoot项目 SpringBoot总结(二)--Spring Boot的自动配置 SpringBo ...
- Java常见应用——Json,二维码生成,加密解密应用
Java常见应用--Json,二维码生成,加密解密应用 一.JSON 1.下载json架包,json官网:json.org 2.将Map/JavaBean/String转化成json对象,只需要使用J ...
最新文章
- python显示当前时间
- HTML5最新漏洞:用户硬盘或被垃圾数据塞满
- python各种模块的使用
- 三、css 和 js 的装载与执行
- homepage php,HomePage.php
- python处理一亿条数据_Python基础数据处理库
- Spark高级操作之json复杂和嵌套数据结构的操作
- 门禁系统产品选择与施工要点
- Redmi K50系列年后登场:最高搭载天玑9000+2K直屏
- MySQL-->索引-->如何创建索引,创建原则
- Docker学习总结(12)——非常详细的 Docker 学习笔记
- PHP爬虫遇到incapsula
- python商城管理系统_【程序源代码】全端商城管理系统(后台+小程序)
- ckplayer6.8 php播放,ckplayer超酷网页视频播放器 6.8
- 义帝熊心--秦末汉初
- 基于机智云物联网平台4孔插座开源
- DataX二次开发——(6)kafkareader、kafkawriter的开发
- 解决ERROR Failed to compile with 3 errors These dependencies were not found: * pdfjs-dist/es5/buil问题
- 当知识图谱遇上推荐系统之MKR模型(论文笔记三)
- 数据结构c语言——树的三种存储结构(双亲表示法、孩子表示法、兄弟表示法)