加入收藏 | 设为首页 | 会员中心 | 我要投稿 唐山站长网 (https://www.0315zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

又把自己的JWT实现改进了一下

发布时间:2021-04-20 17:06:22 所属栏目:外闻 来源:互联网
导读:实现。目前该工具包已经不再维护,而且对于最新推出的Spring Security OAuth2 Client 和 Spring Authorization Server都不是特别的兼容。所以抽了两天时间结合这两个新依赖重新实现了 JWT。 Nimbus 库 在目前最新的Spring Security中默认使用了Nimbus的 JOSE

实现。目前该工具包已经不再维护,而且对于最新推出的Spring Security OAuth2 Client 和 Spring Authorization Server都不是特别的兼容。所以抽了两天时间结合这两个新依赖重新实现了 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.oauth2.jwt.Jwt对象,对于 JWT 的操作可以抽象为两个方面。

生成 JWT

首先就是生成 JWT。目前的 Spring Security 本身是不提供这个能力的,只有在孵化中的Spring Authorization Server提供了生成 JWT 的抽象接口J 的Header和Claims也被相应地抽象为JoseHeader和JwtClaimsSet。

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

解析 JWT

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

Token 对

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

(编辑:唐山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读