我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何生成JWT

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何生成JWT

这篇文章主要讲解了“如何生成JWT”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何生成JWT”吧!

Nimbus 库

在目前最新的Spring Security中默认使用了Nimbus的 JOSE 库nimbus-jose-jwt。这个库目前是 JOSE  最常用的类库之一,大部分的改造工作都是围绕这个库开展的。

改造的过程分享

流程上跟 Spring Security 实战干货大致是一样的。

加载证书

证书依然使用 keytool 生成 2048 长度的 RSA 密钥。

这里之前使用了比较“暴力”的方式直接读取 KeyStore 然后使用公私钥,本次将 KeyStore 加载的证书转变为 JOSE 规范中的  JWK(Json Web Key)。

JWT

JWT 在 Spring Security 中被定义为org.springframework.security.oauth3.jwt.Jwt对象,对于  JWT 的操作可以抽象为两个方面。

生成 JWT

首先就是生成 JWT。目前的 Spring Security 本身是不提供这个能力的,只有在孵化中的Spring Authorization  Server提供了生成 JWT 的抽象接口JwtEncoder:

@FunctionalInterface public interface JwtEncoder {    Jwt encode(JoseHeader headers, JwtClaimsSet claims) throws JwtEncodingException; }

JWT 的Header和Claims也被相应地抽象为JoseHeader和JwtClaimsSet。

于是我使用Nimbus对JwtEncoder进行了实现,其实是搬运了Spring Authorization  Server的实现。当然也不是原版照搬,只是保证了门面一致,这样后续如果这个项目成熟了之后我们就可以无缝兼容了。

解析 JWT

既然有JwtEncoder必然有JwtDecoder。这个在Spring Security OAuth3  Client中是提供实现的,同样对其稍微加以改造。另外这个解码器不但负责将 JWT 字符串解析为 JWT  对象,它还承担了校验功能,这里有一个委托校验器DelegatingOAuth3TokenValidator,我们可以灵活定制来执行多个 JWT  校验策略。

Token 对

我们都知道通常 JWT 中的 Token  都是成对出现的。之前只是简单用一个类来封装了accessToken和refreshToken的字符串形态。这次使用了spring ecurity oauth3  core提供的OAuth3AccessTokenResponse:

public final class OAuth3AccessTokenResponse {     private OAuth3AccessToken accessToken;     private OAuth3RefreshToken refreshToken;     private Map<String, Object> additionalParameters; }

这个类表达的内容更加丰富和灵活。对应的 json:

{   "accessToken": {     "tokenValue": "eyJraWQiOiJmZWxvcmRjbiIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJhbGwiLCJhdWQiOiJyb290IiwiaXNzIjoiaHR0cHM6XC9cL2ZlbG9yZC5jbiIsInNjb3BlcyI6WyJST0xFX0FETUlOIiwiUk9MRV9BUFAiXSwiZXhwIjoxNjE2ODM4NTg4LCJpYXQiOjE2MTY4MzQ5ODgsImp0aSI6IjBiYTUwZjFhLTI0N2YtNDJlYi05NzZiLTkyZWM5NDg2YjA2MCJ9.dwUK4ZgqhalKWu5AA8ZqaHjD2WPerhiF8lmybZGAorbncWdfVk7iAKUdRZunUekZmab_FsVpwprWIQpqSLtp6tz28sI71gO2StEeye5Vv4JRZKys68q2LGOAqMVJnBisEl211b5ASHSlP1qleU_TDxO_rgems76ZFD-kc1KmyelsoiBhmT3aD2_A_3fUmH7mV0jnC0rHauzOpS0AWnuPJaXbGPqrWotkQ_oqly47jipfNsPl_PUY1urng1wSx4QyblS8UgK-n5wJABhSN550WlwNLuC10ZckbhE5gazM0mD86mA_Xepe7LY5rjGNvO-Cz9k44TaURnTdSBdyy_EOiQ",     "issuedAt": {       "epochSecond": 1616834988,       "nano": 891000000     },     "expiresAt": {       "epochSecond": 1616838588,       "nano": 891000000     },     "tokenType": {       "value": "Bearer"     },     "scopes": [       "ROLE_ADMIN",       "ROLE_APP"     ]   },   "refreshToken": {     "tokenValue": "eyJraWQiOiJmZWxvcmRjbiIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJhbGwiLCJhdWQiOiJyb290IiwiaXNzIjoiaHR0cHM6XC9cL2ZlbG9yZC5jbiIsInNjb3BlcyI6WyJST0xFX0FETUlOIiwiUk9MRV9BUFAiXSwiaWF0IjoxNjE2ODM0OTg4LCJqdGkiOiI3N2RhODk3NC0xMjM0LTQ5NzctOWU1MS1hOGY2NTdjMzA2NjAifQ.O9YYxkevkrTke7GbK2R5LGphnJ9vd07yFSwPs2gEZ94ObPkIs1wJ5gvlNOIlni_BYMNO-nMB8TiX0w-RQSwo-sbVLqeUHqv6NEXXmPJiWVmXTFVJf2b6lqW5Re7clXGvkFMw14ptAF6cpThDEE5XF4eCI8CDKKPWqNxY-8NvokwIY3NMXB1ofuHHRqjMyVUwNjOv6eaTJFTwebPy6Saem9kvaL_X1v9Drok6azbg5DSP1zKnbVazTaOs4aBZd5Firib3r_BGXdaJWAgJKfpP61__muVdujgkppMVU8fC9pqfnb6IqEaAOIZ69lrezA1K0QFinOhgcC2YZFxFoLL-IQ",     "issuedAt": {       "epochSecond": 1616834988,       "nano": 891000000     },     "expiresAt": null   },   "additionalParameters": {} }

感谢各位的阅读,以上就是“如何生成JWT”的内容了,经过本文的学习后,相信大家对如何生成JWT这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何生成JWT

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2024-04-02

使用 go-oauth2/oauth2 库生成 JWT 刷新令牌

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,编程网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《使用 go-oauth2/oauth2 库生成 JWT 刷新令牌》,主要介绍了,希望对大家的知识积累有所帮助,快点收
使用 go-oauth2/oauth2 库生成 JWT 刷新令牌
2024-04-05
2024-04-02

java如何生成jar

将*.class文件压缩成一个文件交付给用户使用,那么这样的文件就称为jar文件。如果要想生成jar文件,直接使用JDK中bin目录里的jar.exe就可以将所有的类文件进行压缩。此命令是随JDK一起安装的,直接在命令行中输入jar,即可看到此命令的提示操作。
java如何生成jar
2018-08-01

powerdesigner如何生成sql

本篇内容介绍了“powerdesigner如何生成sql”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!powerdesigner生成sql方
2023-07-05

nodejs如何实现jwt

这篇文章主要介绍“nodejs如何实现jwt”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs如何实现jwt”文章能帮助大家解决问题。1.为什么需要会话管理我们用nodejs为前端或者其他服
2023-07-05

JWT如何整合Springboot

这篇文章将为大家详细讲解有关JWT如何整合Springboot,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.基于JWT认证1.1 认证流程首先,前端通过Web表单将自己的用户名和密码发送到后端的接口。
2023-06-21

ASM如何生成Java类

这期内容当中小编将会给大家带来有关ASM如何生成Java类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。public class GeneratorBean implements org.objectwe
2023-06-03

matlab如何生成图像

这篇文章主要介绍“matlab如何生成图像”,在日常操作中,相信很多人在matlab如何生成图像问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”matlab如何生成图像”的疑惑有所帮助!接下来,请跟着小编一起来
2023-07-04

如何生成csr文件

如何生成csr文件CSR,Certificate Signing Request,是制作SSL 证书的必要步骤。一个 CSR 文件中描述了 SSL 证书持有人的信息(如个人姓名或公司名称)、联系地址等,用于验证 SSL 证书和域名是同一个人
2023-06-04

二维码如何生成

小编给大家分享一下二维码如何生成,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设
2023-06-17

word如何生成目录

这篇文章主要介绍“word如何生成目录”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“word如何生成目录”文章能帮助大家解决问题。word生成目录的方法:1、首先打开你的Word文档,并进入或者输入
2023-07-01

github如何生成地址

GitHub是全球最大的开源代码托管平台,许多开发者在GitHub上分享了自己的代码,让整个开发社区受益。使用GitHub的过程中,掌握如何生成GitHub地址非常重要。GitHub的每个项目都有一个独特的Web地址,在生成这个地址之前,你
2023-10-22

SSL证书如何生成

SSL证书可以通过下列步骤生成:生成私钥:首先需要生成一个私钥文件,用于加密和解密数据传输。可以使用OpenSSL等工具生成私钥文件。生成证书签名请求(CSR):CSR包含了你的公钥和一些基本信息,用于证书颁发机构(CA)生成SSL证书。你
SSL证书如何生成
2024-04-17

编程热搜

目录