JWT JWT

article/2025/11/9 15:50:39

JWT(JSON WEB TOKEN)

JWT的组成

header(头部):中主要存储了两个字段 alg,typ。 alg表示加密的算法默认(HMAC SHA256),typ表示这个令牌的类型默认为JWT。

payload(负载):存储了两部分信息

    1. 官方给出的7个字段
      1. iss (issuer):签发人
      2. exp (expiration time):过期时间
      3. sub (subject):主题
      4. aud (audience):受众
      5. nbf (Not Before):生效时间
      6. iat (Issued At):签发时间
      7. jti (JWT ID):编号
    2. 用户自定义字段
      1. name : 张三
      2. admin : true
      3. account :zhangsan

signature(签名):根据规则进行加密 SHA256(BASE64URLEnCode(header)+"."+BSSE64URLEncode(payload),secret)secret 为密钥,只要服务器才知道。算出签名后,header,payload,signature这三部分中间用.分割。

使用JWT的请求流程

  1. 客户端携带用户名、密码请求服务器,生成token并返回给客户端
  2. 客户端在header中设置authorization=token访问服务器
  3. 服务器校验用户身份信息,校验成功处理业务数据返回结果

使用JWTHelper工具

  1. JWTHelper中的方法
    1. 生成JWT
    2. 解析JWT
    3. 校验JWT是否有效
  2. 在服务器的登陆拦截器中调用JWT校验方法判断token的有效性,如果token无效则返回错误信息,如果token有效,可根据refresh_token更新access_token的有效时间。

利用JWT实现单点登录(SSO)

场景一:用户发起对业务系统的第一次访问,假设他第一次访问的是系统A的some/page这个页面,它最终成功访问到这个页面的过程是:

在这个过程里面,我认为理解的关键点在于:

1. 它用到了两个cookie(jwt和sid)和三次重定向来完成会话的创建和会话的传递;

1. jwt的cookie是写在systemA.com这个域下的,所以每次重定向到systemA.com的时候,jwt这个cookie只要有就会带过去;

2. sid的cookie是写在cas.com这个域下的,所以每次重定向到cas.com的时候,sid这个cookie只要有就会带过去;

3. 在验证jwt的时候,如何知道当前用户已经创建了sso的会话?因为jwt的payload里面存储了之前创建的sso 会话的session id,所以当cas拿到jwt,就相当于拿到了session id,然后用这个session id去判断有没有的对应的session对象即可。

还要注意的是:CAS服务里面的session属于服务端创建的对象,所以要考虑session id唯一性以及session共享(假如CAS采用集群部署的话)的问题。session id的唯一性可以通过用户名密码加随机数然后用hash算法如md5简单处理;session共享,可以用memcached或者redis这种专门的支持集群部署的缓存服务器管理session来处理。

由于服务端session具有生命周期的特点,到期需自动销毁,所以不要自己去写session的管理,免得引发其它问题,到github里找开源的缓存管理中间件来处理即可。存储session对象的时候,只要用session id作为key,session对象本身作为value,存入缓存即可。session对象里面除了session id,还可以存放登录之后获取的用户信息等业务数据,方便业务系统调用的时候,从session里面返回会话数据。

场景二:用户登录之后,继续访问系统A的其它页面,如some/page2,它的处理过程是:

从这一步可以看出,即使登录之后,也要每次跟CAS校验jwt的有效性以及会话的有效性,其实jwt的有效性也可以放在业务系统里面处理的,但是会话的有效性就必须到CAS那边才能完成了。当CAS拿到jwt里面的session id之后,就能到session 缓存服务器里面去验证该session id对应的session对象是否存在,不存在,就说明会话已经销毁了(退出)。

场景三:用户登录了系统A之后,再去访问其他系统如系统B的资源,比如系统B的some/page,它最终能访问到系统B的some/page的流程是:

这个过程的关键在于第一次重定向的时候,它会把sid这个cookie带回给CAS服务器,所以CAS服务器能够判断出会话是否已经建立,如果已经建立就跳过登录页的逻辑。

场景四:用户继续访问系统B的其它资源,如系统B的some/page2:

这个场景的逻辑跟场景二完全一致。

场景五:退出登录,假如它从系统B发起退出,最终的流程是:

最重要的是要清除sid的cookie,jwt的cookie可能业务系统都有创建,所以不可能在退出的时候还挨个去清除那些系统的cookie,只要sid一清除,那么即使那些jwt的cookie在下次访问的时候还会被传递到业务系统的服务端,由于jwt里面的sid已经无效,所以最后还是会被重定向到CAS登录页进行处理。

方案总结

以上方案两个关键的前提:

1. 整个会话管理其实还是基于服务端的session来做的,只不过这个session只存在于CAS服务里面;

2. CAS之所以信任业务系统的jwt,是因为这个jwt是CAS签发的,理论上只要认证通过,就可以认为这个jwt是合法的。


http://chatgpt.dhexx.cn/article/Ua0eniFc.shtml

相关文章

JWT__

文章目录 JWT什么是JWT?JWT能做什么?认证流程JWT的结构是什么?使用代码要做一个JWT的例子引入pom依赖生成一个Token令牌验证令牌并从令牌中取出信息 JWT 什么是JWT? 官网地址:https://jwt.io/introduction/ 官方文档 JSON Web T…

JWT 和 JJWT 还傻傻的分不清吗

JWTs是JSON对象的编码表示。JSON对象由零或多个名称/值对组成,其中名称为字符串,值为任意JSON值。 JWT有助于在clear(例如在URL中)发送这样的信息,可以被信任为不可读(即加密的)、不可修改的(即签名)和URL - safe(即Base64编码的)。 JSON W…

【编码实战】2022年还在用jjwt操作jwt?,推荐你使用nimbus-jose-jwt,爽到飞起~

什么是nimbus-jose-jwt? nimbus-jose-jwt是基于Apache2.0开源协议的JWT开源库,支持所有的签名(JWS)和加密(JWE)算法。 对于JWT、JWS、JWE介绍 JWT是一种规范,它强调了两个组织之间传递安全的信息JWS是JWT的一种实现,包含三部分hea…

什么是JWT??

一、什么是JWT JWT(JSON WEB TOKEN),通过数字签名的方式,以json对象为载体,在不同的服务终端之间安全的传输信息,用来解决传统session的弊端。 JWT在前后端分离系统,或跨平台系统中,通过JSON形式作为WEB应用…

JJWT实现令牌Token

登录实现方式 Session 详情: https://www.cnblogs.com/andy-zhou/p/5360107.html 会话的概念 会话就好比打电话,一次通话可以理解为一次会话。我们登录一个网站,在一个网站上不同的页面浏览,最后退出这个网站,也是…

3.JJWT

目录 1.JWT简介 2.JWT的结构 3.基于服务器的传统身份认证 4.基于token的身份认证 5. JWT的优势 6.Java中使用JJWT实现JWT 1.JWT简介 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519)。该token被设计为紧凑且安全的…

JWT技术

JWT 一、 JWT 实现无状态 Web 服务 1、什么是有状态 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。 例如登录:用户登录后&am…

token学习笔记(JWT、jjwt的使用及案例实现)

文章目录 1. 首先、了解什么是会话2. 会话跟踪的主要技术3. Token 令牌学习3.1 流程图3.2 token3.3 JWT(JSON web Tokens)Json web 令牌(规范)3.4 JWT结构3.5 JWT需要的依赖3.6 JWT的获取与验证流程3.7JWT的使用方式3.8 jjwt的使用(创建JWT方式)1. jjwt需…

JWT 进阶 -- JJWT

###jwt是什么? JWTs是JSON对象的编码表示。JSON对象由零或多个名称/值对组成,其中名称为字符串,值为任意JSON值。JWT有助于在clear(例如在URL中)发送这样的信息,可以被信任为不可读(即加密的)、不可修改的(即签名)和URL - safe(即Base64编码…

JWT详解和使用(jjwt)

JWT详解和使用 JWT是啥 JWT(JSON Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。 下列场景中使用…

JJWT 实现JWT

1什么是JJWT JJWT 是一个提供端到端的 JWT 创建和验证的 Java 库。永远免费和开源 (Apache License,版本2.0),JJWT 很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。 2JJWT快速入门 2.1token的创建 2.1…

什么是JWT?

在HTTP接口调用的时候,服务端经常需要对调用方做认证,以保证安全性。一种常见的认证方式是使用JWT(Json Web Token),采用这种方式时,经常在header传入一个authorization字段,值为对应的jwt_token,或者也有图…

JWT的学习和JJWT的使用

1.什么是JWT JWT(JSON Web Token)是一个开放的行业标准,它定义了一种简介的,自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或者使用RSA的公…

JWT详解

本文从本人博客搬运,原文格式更加美观,可以移步原文阅读:JWT详解 JWT简介 1.什么是JWT 在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流程: 客户端使用用户名和密码请求登录服务端收到请求&#xff…

JWT详解、JJWT使用、token 令牌

前言 在正式讲解JWT之前,我们先重温一下用户身份认证相关的一些概念: 有状态登录(session认证) 服务器当中记录每一次的登录信息,从而根据客户端发送的数据来判断登录过来的用户是否合法。 缺点: 每个用…

Java的JJWT实现JWT

1 什么是 JJWT JJWT 是一个提供端到端的 JWT 创建和验证的 Java 库。永远免费和开源 (Apache License,版本2.0),JJWT 很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。 2 token 的创建 2.1 引入依赖 &l…

解决Red Hat虚拟机与主机网络不通

虚拟机版本:Red Hat Enterprise Linux 7 64 位 安装:自定义安装,带GUI的服务器,创建图形化界面 创建完毕后发现网络ping不通,经过查阅各种资料,在同事的帮助下终于解决。做一个记录。 1、VMware网络配置。…

虚拟机VMware和宿主机连接

文章目录 一、NAT连接1.查看宿主机IP地址2.设置VMnet8信息2.设置虚拟机模式3.设置虚拟网络4.设置虚拟机内系统IP(Centos8.2为例)4.1.图形化操作4.1.1DHCP4.1.2静态IP4.1.3 重启网卡(修改网卡信息后) 5.测试5.1.宿主机ping虚拟机5.…

VMware虚拟机三种网络连接模式详解

VMware虚拟机三种网络连接模式详解 Vmware提供了三种网络工作模式,分别是:(1)Bridged(桥接模式);(2)NAT(网络地址转换模式);&#xf…

虚拟机与主机之间通信

1.bridged(桥接方式,默认使用vmnet0虚拟网卡): 选择这种模式,虚拟机等同于网络内的一台物理主机,可对手动设置IP,子网掩码。DNS,且IP地址要和主机的IP在同一网段内。这样。虚拟机就和主机如同连在一个HUB上…