JWT- Java Web Token 原理

本文介绍了JWT(JSON Web Token)的概念及其组成部分,包括Header、Payload和Signature。解释了JWT如何通过简洁、自包含的方式实现在不同模块间的安全信息传输,并详细阐述了JWT的报文结构及各部分的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JWT是一个轻量级的规范,之前学习过,但一直没有什么应用。最近在做一个OAuth 2相关的项目,有用到JWT。于是,再复习一遍。

JWT是什么?

JSON Web Token (JWT) 是一个简洁的,自包含的,可安全的在两个模块之间传输。这是JWT.io给出的定义。

简洁: JWT的规模比较小,它的报文可以通过URL或者HTTP的POST参数,甚至插入在HTTP头中。

自包含:在JWT payload部分包含了所有的必须的信息。

JWT报文结构:

Header: Header通常包含两部分:typ token类型, alg 所用的hash算法

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

Payload:Payload部分是JWT的信息主体。Payload有三种申明信息:注册,公开和私有申明信息。

注册声明:这一类中,JWT推荐但不是要求必须的四个参数是:iss (issuer), exp (expiration time), sub (subject), aud (audience).

共有声明:这些可以被定义在那些使用JWT的规范中,例如OpenID Connect,例如name, give_name。但是注意,避免使用冲突。

私有声明:自定义的声明

例子:

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

Signature: 签名是一个利用算法对header和payload的组合的加密字符串。这个签名可防止信息的篡改但不能防止信息的泄露。所以在JWT中,不能包含敏感信息。

签名的算法过程:

1. header字符串用base64加密

2. payload字符串用base64加密

3. 前两者加密的结果用点号 (.)连接起来。heder在前,paload在后

4. 然后使用header头中的注明的算法,对这个字符串加密的结果就是签名。加密过程中还会用到一个secret字符串

如下算法示意:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
完整的 JWT字符串是base64(header).base64(paload).Signature


参考文章:

1. https://jwt.io/introduction/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值