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

什么是 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来实现,首先引入依赖:

com.auth0

java-jwt

3.7.0

签名

使用 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中获取

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Python 中,JWT(JSON Web Token)的验证过程可以使用 `jwt` 库来实现。`jwt` 库提供了一些函数和方法来进行 JWT 的验证,其中最常用的是 `jwt.decode()` 和 `jwt.verify_jwt()` 函数。 `jwt.decode()` 函数用于解码和验证 JWT,并返回 JWT 中的 payload 数据。它接受三个参数:JWT 字符串、密钥和算法。 `jwt.verify_jwt()` 函数可以进行更加详细的 JWT 验证,包括验证签名、过期时间、生效时间等。它接受两个参数:JWT 字符串和密钥。 下面是一个简单的示例代码,展示了如何使用 `jwt.verify_jwt()` 函数进行 JWT 的验证: ```python import jwt def verify_jwt(jwt_token, secret_key): try: # 验证 JWT decoded_token = jwt.verify_jwt(jwt_token, secret_key) print("JWT 验证成功!") print("Payload 数据:", decoded_token) except jwt.JWTExpired: print("JWT 已过期!") except jwt.JWTInvalidSignature: print("JWT 签名无效!") except jwt.JWTInvalid: print("JWT 无效!") # 要验证的 JWT jwt_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" # 密钥 secret_key = "my_secret_key" verify_jwt(jwt_token, secret_key) ``` 在上面的示例中,首先定义了一个 `verify_jwt()` 函数,它接受 JWT 字符串和密钥作为参数。然后,在函数内部使用 `jwt.verify_jwt()` 函数对 JWT 进行验证。如果验证成功,将打印出 JWT 验证成功的信息以及解码后的 payload 数据;如果 JWT 过期、签名无效或无效,将会捕获相应的异常并打印出错误信息。 需要注意的是,JWT 的验证过程中需要使用正确的密钥和算法,以确保安全性和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值