深入了解java-jwt生成与校验

所属分类: 软件编程 / java 阅读数: 50
收藏 0 赞 0 分享

什么是 JWT

这里是jwt 官方地址,想了解更多的可以在这里查看。

jwt 全称是JSON Web Token,从全称就可以看出 jwt 多用于认证方面的。这个东西定义了一种简洁的,自包含的,安全的方法用于通信双方以 json 对象的形式传递信息。其中简洁,安全,传递信息和 web 系统非常契合。

jwt 实际上就是一个字符串,由以下三个部分构成(通过.分隔):

  • Header 头部
  • Payload 负载
  • Signature 签名

因此一个 jwt 字符串都是如下的形式:

Header.Payload.Signature

Header

header 大多数情况下是只包含两个属性的 json 字符串,token 的类型(“JWT”)和用到的算法(比如 HS256,RS256,ES256 等)如下:

{
"alg": "HS256",
"typ": "JWT"
}

然后用 Base64 将其编码就等到了 jwt 的第一部分

Payload
payload 顾名思义用于携带数据的,这里的数据有三种类型:

  • Registered claims:一组预定义的声明,写在 jwt 标准中,所有对其的实现都要准守。但不是强制要求携带。有以下几个字段:iss(签发者),iat(创建时间),exp(过期时间),aud(签发者),sub(面向的用户)
  • public claims:随意定义,通常存放用户 id,用户类别等非铭感信息

这些数据也是 json 的形式,用 Base64 编码后就得到了 JWT 的第二个部分。

Signature

签名就是通过设定的秘钥和签名算法来对 header 和 payload 进行签名得到一个签名字符串,将这三个字符串组合起来就是 JWT 了。

java 中使用

通过java-jwt来实现,首先引入依赖:

<dependency>
<!-- 截止当前最新版本为3.7 -->
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.7.0</version>
</dependency>

签名

使用 HMC256,代码入下:

private static final Algorithm ALGORITHM= Algorithm.HMAC256("security");
public static String encode() {
//通过秘钥生成一个算法
String token = JWT.create()
//设置签发者
.withIssuer("test")
//设置过期时间为一个小时
.withExpiresAt(new Date(System.currentTimeMillis()+60*60*1000))
//设置用户信息
.withClaim("name","小明")
.withClaim("age",20)
.sign(ALGORITHM);
return token;
}

验证

验证代码如下:

//校验类
private static final JWTVerifier JWT_VERIFIER= JWT.require(ALGORITHM).withIssuer("test").build();
public static void decode(String token) {
DecodedJWT decodedJWT = JWT_VERIFIER.verify(token);
//如果校验失败会抛出异常
//payload可从decodeJWT中获取
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

spring boot 静态资源处理方法

本篇文章主要介绍了spring boot 静态资源处理方法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解spring boot 使用application.properties 进行外部配置

这篇文章主要介绍了详解spring boot 使用application.properties 进行外部配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Java实现分页的前台页面和后台代码

这篇文章主要为大家详细介绍了Java实现分页的前台页面和后台代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解spring面向切面aop拦截器

spring中有很多概念和名词,比如过滤器、拦截器、aop等。这篇文章主要介绍了详解spring面向切面aop拦截器,有兴趣的可以了解一下。
收藏 0 赞 0 分享

Java easyui树形表格TreeGrid的实现代码

这篇文章主要为大家详细介绍了Java easyui树形表格TreeGrid的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java的NIO与IO的详解及对比

这篇文章主要介绍了Java的NIO与IO的详解及对比的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java中网络IO的实现方式(BIO、NIO、AIO)介绍

这篇文章主要介绍了Java中网络IO的实现方式(BIO、NIO、AIO)介绍的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 敏感信息加密处理

本文主要介绍了Java 敏感信息加密处理的相关知识:1)敏感信息加密处理我们要实现什么;2)敏感信息加密处理我做了些什么;3)敏感信息加密实现方法。具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享

详解使用Spring3 实现用户登录以及权限认证

这篇文章主要介绍了详解使用Spring3 实现用户登录以及权限认证,这里整理了详细的代码,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

Java的内存机制详解

本文主要介绍了Java的内存机制的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享
查看更多