基于Spring Security+RSA+Redis的SSO的单点登录

8 篇文章 0 订阅
2 篇文章 0 订阅

一、怎么基于Spring Security?

  • 基于过滤器链中的OncePerRequestFilter每次请求识别请求头Header中的token
    在这里插入图片描述

二、token的识别步骤

  • 获取请求头
String header = request.getHeader(HttpHeaders.AUTHORIZATION);
  • redis中获取真的token
    在这里插入图片描述
  • 普通的String操作 k-v
realToken = redisService.getCacheObject(token);

单点登录的重点就在于这个token与用户信息存在redis中,并且因为走的Spring Security的过滤器链,使得分布式时,其他系统依赖到这个单独SSO的系统上,其他请求也得走我们基于OncePerRequestFilterJwtVerifyFilter

三、RSA验证token

  • 通过token、公钥,解析用户信息(验证token是否正确)
Payload<SysUser> payload = JwtUtils.getInfoFromToken(realToken, rsaKeyProperties.getPublicKey(),
                        SysUser.class);

在这里插入图片描述

  • 解析redis中取出的realToken
/**
     * 公钥解析token
     *
     * @param token     用户请求中的token
     * @param publicKey 公钥
     * @return Jws<Claims>
     */
    private static Jws<Claims> parserToken(String token, PublicKey publicKey) {
        return Jwts.parser().setSigningKey(publicKey).parseClaimsJws(token);
    }
  • 解析token后的Jws<Claims>后分为三部分(用户信息,token,过期时间),JWT一般都这样
    在这里插入图片描述

  • 后面的就比较常见了,重新设置Spring Security的全局认证,并刷新token【刷新过期时间Expire
    在这里插入图片描述

  • 既然有用来解析的,那就有生成的,就通过私钥加密token

String token = JwtUtils.generateTokenExpireInMinutes(sysUser, rsaKeyProperties.getPrivateKey(), bodyId,
                24 * 60);
  • 加密关键参数与解析时除了公钥相同
    在这里插入图片描述

RSA生成的公钥与私钥是一对,就可以用于上面的用处,至于具体的解析与加密方法先了解下JWTjsonwebtoken)【jar包jjwt-pai

四、完

到此结束\(^o^)/~

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值