Java jwt使用公钥字符串验证解析token锁方法详解

 更新时间:2023年02月10日 10:51:42   作者:爱学习的大雄  
关于java获取Token验证的问题相信很多人都遇见过,尤其是对刚接触微信开发的人来说确实有点棘手,下面这篇文章主要给大家介绍了关于Java中token验证解析的相关资料,需要的朋友可以参考下

引言

本文主要示例如何通过已知的公钥(字符串),来使用java-jwt校验token锁。

由于java-jwt中校验时所需要的公钥是RSAPublicKey对象而我们目前的公钥是字符串,所以我们需要进行转化,本篇文章主要就是记录如何进行这个转化

如果需要了解公钥、私钥的概念,请百度其它文章。

代码

<!-- java-jwt -->
<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>4.2.1</version>
</dependency>
/**
 * 根据公钥字符串生成PublicKey对象
 * @return
 * @throws NoSuchAlgorithmException
 * @throws InvalidKeySpecException
 */
private static PublicKey getPublicKey()
        throws NoSuchAlgorithmException, InvalidKeySpecException {
    String pem = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWCkZn1ksPM+DBLzgaffe2je6/Kr168fDI/CAM23Ardh4+w5yprtCmNfibCLcNZ66OzPC164p4ufboc9fxXqd5mv0ZtaHGG2pATH5e7z+Gla3Bd3QX8WqJi5LkAtsdP23IQqhz8UHA+Vmd6pTzobcQBhF1K7K/zcK9QDTFon4tCxL12wSOl40CDlWnaHortvljmJ5T3zD1iPjHjpVejI5YQReqxXEuqFVTqu2nhdTWAmfX8KrlVbPGPCevruKFmNvnl09N0Kk2CZGRlLq5aE7UZxH3GOkNWKkVWMO7tUgoJK9r8v/EIrIcuO5SX7RuyyhyY0/fsx3f+CTrUATkfgVwIDAQAB";
    X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(pem));
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");
    PublicKey publicKey = keyFactory.generatePublic(pubKeySpec);
    System.out.println(publicKey);
    return publicKey;
}
/**
 * 校验token
 * @param token
 * @return
 * @throws Exception
 */
public static DecodedJWT verifierToken(String token)throws Exception{
    //其实按照规定只需要传递 publicKey 来校验即可,这可能是auth0 的缺点
    Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) getPublicKey(),null);
    JWTVerifier verifier = JWT.require(algorithm)
            //.withIssuer(ISSUER)
            .build(); //Reusable verifier instance 可复用的验证实例
    DecodedJWT jwt = verifier.verify(token);
    return jwt;
}

测试

@SpringBootTest(classes = KeycloakdemoApplication.class)
@RunWith(SpringRunner.class)
public class DemoTest {
    @Test
    public void testGetInstance() throws Exception {
        DecodedJWT verify = JWTUtils.verifierToken("eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIxdGtoMFBXanE1SmpOalVjc1hNYnJ1TldQVngtM2tQekJpekJGTDZfUDFJIn0.eyJleHAiOjE2NzM0NTc3MjYsImlhdCI6MTY3MzQ1NzQyNiwiYXV0aF90aW1lIjoxNjczNDU2MTU1LCJqdGkiOiJiMDZlNDljNS1kMTk5LTQ4ZWItYWE4NS1iNWJjMTMxNDVhMWIiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODEvYXV0aC9yZWFsbXMvbXlSZWFsbSIsInN1YiI6ImI4ZTAwM2Y1LTIxNDktNDUwMC04ZTE1LTZkZTU1YWM1MGRmMyIsInR5cCI6IkJlYXJlciIsImF6cCI6Im15Y2xpZW50Iiwic2Vzc2lvbl9zdGF0ZSI6ImRlM2Q4ZjZhLTE4YzAtNGYzYS1hNmQwLWNlNTBjNmM2ZmNjMyIsImFjciI6IjAiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiYWRtaW4iXX0sInNjb3BlIjoib3BlbmlkIGVtYWlsIHByb2ZpbGUiLCJzaWQiOiJkZTNkOGY2YS0xOGMwLTRmM2EtYTZkMC1jZTUwYzZjNmZjYzMiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIn0.sGblDdBIkwnDDUcGd7-2QlCeA17gnmuvXosqpZ0T_zGlKtr6Ta-z1QSgwdc8K5ivekyIQmcYAIh-eHmfVxjCLKZ6fR-AdTeqenXdkNJuMREzwKpnOFx1Wq2LZUb-hqWKJimBKi2iUPlu4ENAVbFOWxcMwIedySpN74RHF3yP4BKr4YfAmr5u9CSX3EYw0LMiMVlt6l_FKNssKnTLlBq0IPDlBdwV9D1l6qpDXu_uIbvUzb_w8rnSoUGMqqqxI-RNF6m5dit29KWinFfkat5-g-lvbiVz8l0wYfMBGb9ESwC0aXJARcEG7PdhtqYLPjsGFVrjqHMq1ci_BVivAt3Htw");
        System.out.println(verify);
        System.out.println(verify.getExpiresAt());
        System.out.println(verify.getClaim("scope"));
        System.out.println(verify.getExpiresAtAsInstant());
        System.out.println(verify.getClaims());
    }
}

到此这篇关于Java jwt使用公钥字符串验证解析token锁方法详解的文章就介绍到这了,更多相关Java验证解析token锁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中session存储Users对象实现记住密码

    Java中session存储Users对象实现记住密码

    这篇文章主要介绍了Java中session存储Users对象实现记住密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Maven依赖作用域和依赖传递的使用

    Maven依赖作用域和依赖传递的使用

    本文主要介绍了Maven依赖作用域和依赖传递的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java ConcurrentHashMap用法案例详解

    Java ConcurrentHashMap用法案例详解

    这篇文章主要介绍了Java ConcurrentHashMap用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java字节缓冲流原理与用法详解

    Java字节缓冲流原理与用法详解

    这篇文章主要介绍了Java字节缓冲流原理与用法,结合实例形式总结分析了java字节流与缓冲区相关原理与操作技巧,需要的朋友可以参考下
    2019-09-09
  • JUnit5常用注解的使用

    JUnit5常用注解的使用

    注解是JUnit的标志性技术,本文就来对它的20个注解,以及元注解和组合注解进行学习,感兴趣的可以了解一下
    2021-07-07
  • Java中Thread类的使用和它的属性

    Java中Thread类的使用和它的属性

    在java中可以进行多线程编程,在java标准库中提供了一个Thread类,来表示线程操作,本文主要介绍了Java中Thread类的使用和它的属性,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • java使用FastJson解析Json数据

    java使用FastJson解析Json数据

    本篇文章主要介绍了java使用FastJson解析Json数据,fastjson 是一个性能极好的用 Java 语言实现的 JSON 解析器和生成器,有兴趣的可以了解一下。
    2017-02-02
  • java 集合之实现类ArrayList和LinkedList的方法

    java 集合之实现类ArrayList和LinkedList的方法

    下面小编就为大家带来一篇java 集合之实现类ArrayList和LinkedList的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • springboot切换使用undertow容器的方式

    springboot切换使用undertow容器的方式

    最近稍微有点空闲,回头再来优化下基础框架,也是一种重新学习。今天主要写写跟大家分享下springboot使用undertow,废话不多说
    2022-07-07
  • Java案例之HashMap集合存储学生对象并遍历

    Java案例之HashMap集合存储学生对象并遍历

    这篇文章主要介绍了Java案例之HashMap集合存储学生对象并遍历,创建一个HashMap集合,键是学号(String),值是学生对象(Student),存储三个键值对元素并遍历,下文具体操作需要的朋友可以参考一下
    2022-04-04

最新评论