JWT与单点登录实例解释

本文详细介绍了JWT(JSON Web Token)的工作原理,包括其组成部分:头部、负载和签名。JWT用于在分布式系统中安全地传递信息,例如用户身份验证。通过示例展示了JWT的编码和验证过程,并提到在验证时需要服务器的私钥。此外,文章还提及了一个模拟登录POST请求的过程,强调了在没有私钥的情况下验证会失败。
摘要由CSDN通过智能技术生成

JWT与单点登录实例解释

一.jwt原理

1.打开jwt官网,下滑
https://jwt.io
在这里插入图片描述

1.左边是jwt编码实例,右边是对编码的解释,以逗号分割
2.编码分成三个部分,红色的的是head,具体描述了使用的编码算法

3.紫色的是payload,保存的具体信息,例如用户密码,id
4.蓝色的是signature,是最重要的部分,也就相当于激光防伪标志,
服务器通过这个数字签名来判断你发的token是否有效,是否被篡改过
,一旦失败就会无效

二.模拟登陆post

在这里插入图片描述
1.将下面的jwt token复制到网站的左边框中,而后就会进行分析

2.在这里插入图片描述
因为这里找不到私钥,所以现在验证为错误

3.可以到项目appsetting.json中,寻找私钥
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Shiro 支持使用 JSON Web Token (JWT) 实现单点登录 (SSO)。 实现步骤如下: 1. 在服务端生成 JWT 并返回给客户端。 2. 客户端保存 JWT 并在请求中加上 HTTP Header,如 "Authorization: Bearer JWT"。 3. 服务端收到请求后验证 JWT 的有效性。 4. 如果 JWT 有效,则允许访问请求的资源。 以下是一个使用 Shiro 实现 JWT 验证的示例代码: ```java import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; public class JwtRealm extends AuthorizingRealm { private String secretKey; public JwtRealm(String secretKey) { this.secretKey = secretKey; } @Override public boolean supports(AuthenticationToken token) { return token instanceof JwtToken; } @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // 这里可以根据 JWT 中的自定义字段来进行权限控制 return null; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { JwtToken jwtToken = (JwtToken) token; String jwt = jwtToken.getPrincipal().toString(); Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody(); // 验证 JWT 是否过期 if (claims.getExpiration().before(new Date())) { throw new AuthenticationException("JWT 已过期"); } // 这里可以使用 claims 中的用户信息来创建 SimpleAuthenticationInfo 对象 return new SimpleAuthenticationInfo(jwt, jwt, "j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有诗亦有远方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值