搜索

查看: 3116|回复: 11

[PHP] PHP解析RuoYi框架实现Token解密详解

[复制链接]
发表于 2023-5-4 17:06:53 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:06:53 3116 11 看全部
目录
  • 业务场景
  • JWT的基础知识
  • RuoYi 框架下的生成的Token解密
    业务场景
    RuoYi 自带完善的管理后台
    PHP 暂未找到类似的适合的代码
    基于当前新业务量小,开发快速的特征,业务方面用PHP代码开发
    于是需要将Ruoyi框架的登陆Token解析出请求体来

    JWT的基础知识
    Jwt 实际上由三部分组成
  • 标头: 一个json字符串,包含当前令牌名称,以及加密算法
  • 载荷: 存储有效的信息的部分
  • 签名: 防止Token被更改
    其实是一个很简单东西,3个关键信息Base64位加密,然后拼接下
    详细了解参考文章:JWT使用教程

    RuoYi 框架下的生成的Token解密
    RuoYi-vue 版本的Token生成代码如下
    package com.wzop.framework.web.service;
    @Component
    public class TokenService
    {
            // 其他内容省略....
            /**
             * 从数据声明生成令牌
             *
             * @param claims 数据声明
             * @return 令牌
             */
            private String createToken(Map claims)
            {
                    // jwtHeader 是我加上去的,需要头部放入了typ参数
                    // PHP解密的时候具体说明这部分改动的原因
                Map jwtHeader = new HashMap();
                jwtHeader.put("typ","JWT");
                // 需要注意,我为了简单把签名改成了 HS256
                String token = Jwts.builder()
                        .setHeader(jwtHeader)
                        .setClaims(claims)
                        .signWith(SignatureAlgorithm.HS256, secret).compact();
                return token;
            }
    }
    签名部分代码
    package io.jsonwebtoken.impl;
    public class DefaultJwtBuilder implements JwtBuilder {
            // 其他代码省略....
            // 注意下面的代码  byte[] bytes = TextCodec.BASE64.decode(base64EncodedSecretKey);
            // key 传入进来是要Bese64解密后再使用
        public JwtBuilder signWith(SignatureAlgorithm alg, String base64EncodedSecretKey) {
            Assert.hasText(base64EncodedSecretKey, "base64-encoded secret key cannot be null or empty.");
            Assert.isTrue(alg.isHmac(), "Base64-encoded key bytes may only be specified for HMAC signatures.  If using RSA or Elliptic Curve, use the signWith(SignatureAlgorithm, Key) method instead.");
            byte[] bytes = TextCodec.BASE64.decode(base64EncodedSecretKey);
            return this.signWith(alg, bytes);
        }
    }
    PHP 代码处理部分
    先通过composer引入EasyJwt
    composer require nowakowskir/php-jwt

    explainToken($token3, base64_decode("qFRpGBvXx0XwOI2QCI"))->getPayload();
            var_dump($result);
        }
    }
    至此RuoYi的生成的Token解密完成
    接下来就只要拿着解密后的key去redis里获取用户信息就可以了
    到此这篇关于PHP解析RuoYi框架实现Token解密详解的文章就介绍到这了,更多相关PHP RuoYi框架内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-29 14:01:02 | 显示全部楼层
    123456819 2023-6-29 14:01:02 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-6-29 14:20:11 | 显示全部楼层
    永远就三年疗 2023-6-29 14:20:11 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-29 17:36:49 | 显示全部楼层
    123456809 2023-6-29 17:36:49 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-29 22:13:20 | 显示全部楼层
    dxf17 2023-6-29 22:13:20 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-6-30 08:51:29 | 显示全部楼层
    风吹吹蛋蛋疼风w 2023-6-30 08:51:29 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-6-30 15:12:56 | 显示全部楼层
    123456848 2023-6-30 15:12:56 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-7-3 09:04:46 | 显示全部楼层
    惜颜705 2023-7-3 09:04:46 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-7-3 10:28:27 | 显示全部楼层
    音乐之家1 2023-7-3 10:28:27 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-7-3 20:27:44 | 显示全部楼层
    小妖花满楼满fx 2023-7-3 20:27:44 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表