初识JWT

JWT全称JSON Web Token是一种新的身份认证技术,也是一种信息交换技术。

JWT的原理是,在服务器在进行完认证会生成一个JWT token 并且返回给客户端。以后客户端每次的请求都加上这个token,客服端每次请求加上这个token服务器就可以通过算法解析token里内容拿到客户端端的认证信息。由于这个token只保存在客户端,并未在服务器端保存,所以是无状态的,方便扩展。

JWT有以下三个部分组成:

  • Header
  • Payload
  • Signature

因此JWT最终的结果是xxxxx.yyyyy.zzzzz这样格式的字符串。

Header

header主要包含了2部分内容,签名所用的算法和token类型。支持的签名算法有HMAC、SHA256、 RSA等。token类型为JWT

{
    "alg":"sha256",
    "type":"JWT"
}

将这部分内容进行Base64编码,便是JWT的第一部分内容。

Payload

payload是JWT的有效负载,payload有三部分数据,第一部分数据是预定义字段有iss(签发人)、sub(主题)、adu(受众)、exp(过期时间)、nbf(生效时间)、iat(签发时间)、jti(JWT ID)总共7个。第二部分是公开字段在IANA JSON Web Token Registry有注册。第三部分是私有的字段不能和必须声明字段和公开注册字段冲突即可,下面是payload的一个demo

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

这部分内容也是要进行Base64编码的,编码后的字符串是JWT的第二部分。

Signature

signature通过使用header里声明的签名算法,由服务器提供一个secret对已经Base64编码后的header和payload进行签名得到的。

signature=sha256(header + '.' + payload, secret);

最终返回给客户端的内容就是下面这样格式的字符串

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中的代码示例展示了如何使用JWT.decode()方法解析JWT令牌。JWT.decode()方法接受一个JWT令牌字符串作为参数,并返回一个DecodedJWT对象。在此示例中,JWT令牌字符串被赋值给jwtToken变量,然后使用JWT.decode(jwtToken)方法将其解析为DecodedJWT对象。接下来,可以使用DecodedJWT对象的getClaim()方法获取JWT令牌中的声明信息,例如userId和username。最后,可以使用userService.getUserById(userId)方法根据userId获取用户信息,并将其返回。 引用中的代码示例展示了另一种解析JWT令牌的方法。在这个示例中,我们使用静态方法getToken()来解析JWT令牌。getToken()方法接受一个JWT令牌字符串作为参数,并返回一个DecodedJWT对象。在方法的实现中,使用JWT.decode()方法将JWT令牌解码为DecodedJWT对象。然后可以根据需要获取具体的数据,例如userId、userMobile、userName等。最后,将解析后的DecodedJWT对象返回。 引用展示了JWTVerifier对象的verify()方法的用法。在这个示例中,verify()方法接受一个JWT令牌字符串作为参数,并返回一个DecodedJWT对象。在方法的实现中,首先调用JWT.decode()方法将JWT令牌解码为DecodedJWT对象。然后进行加密方式的校验、签名的校验和数据的校验。最后,返回解析后的DecodedJWT对象。 总结起来,jwt.decode()是用于解析JWT令牌的方法,它接受一个JWT令牌字符串作为参数,并返回一个DecodedJWT对象。通过DecodedJWT对象,可以获取JWT令牌中的声明信息,并进行相应的校验和处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [DecodedJWTJWT](https://blog.csdn.net/mingzq123/article/details/129785289)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [初识JWT及部分源码解析](https://blog.csdn.net/lkx021699/article/details/124712017)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值