爬虫(三)突破JWT认证

JWT认证

一、工作原理

	鉴权原理和cookie、session认证差不多,不多说直接上图


token一般分为三部分:头部、载体、签名

二、具体案例

1.1 、以新版电子税务局为例,rpa在拿到税务数字账户cookie后,验证cooke有效性的过程中,发现无法唤醒新开的浏览器(表象:页面空白)

正常页面:
在这里插入图片描述
cookie初次唤醒页面(非必现):
在这里插入图片描述
在此之前,其实我并不知道JWT这个概念,但是大概知道应该是鉴权没通过的导致的,并且看到页面报错
在这里插入图片描述
在这里插入图片描述

1.2、比对正常rpa登录、cookie登录页面参数 ,观察发现有个区别,就是在cookie登录时,凡是跳转后页面空白的情况,大概率这个字段的值都是空的

在这里插入图片描述
初步断定这个字段应该是服务端生成的,这就是问题所在,尝试将rpa登录后中的token保存下来,再塞到cookie登录的环节中,刷新页面发现是可以的,大功告成。
在这里插入图片描述

1.3、关键模块实现
    /**
     * 获取上传token
     */
    async upload_token() {
        var token_data = await this.page.evaluate(() => {
            const token_data = {};
            for (let i = 0; i < localStorage.length; i++) {
                const key = localStorage.key(i);
                token_data[key] = localStorage.getItem(key);
            }
            return token_data
        });
        fs.writeFileSync("token.json", JSON.stringify(token_data))
        console.log("------token上传成功------")
    }
    /**
    * cookie登录
    */
    async cookie_login() {
        console.log("------开始cookie登录------")
        await this.access_login_page();
        await this.page.deleteCookie();
        // 添加cookie
        await this.page.setCookie(cookies_array.at(0), cookies_array.at(1));
        await this.page.goto(cfg.login_page_url);
        await this.sleep(1000 * 10)
        for (var i = 0; i < 3; i++) {
            if (await this.page.$(cfg.top_navigtor_locator)) {
                break
            }
            console.log("第%d次尝试刷新页面", i)
            // 添加token
            await this.page.evaluate((key, value) => {
                localStorage.setItem(key, value);
            }, "dunm_data", cookies_array.at(2)["dunm_data"])
            await this.page.reload()
            await this.sleep(1000 * 5)
        }
    }

篇外话:入职新公司一周多了,上面是刚做的就随手记录下,平常主要用nodejs的puppeteer做爬虫,然后还会有接口的开发,涉及koa框架的使用,其他的,怎么说呢,之前没接触过先学完…

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ruoyi是一个开源的Java框架,提供了一套快速开发管理系统的解决方案。在ruoyi框架中,可以使用JWT(JSON Web Token)进行身份认证JWT是一种规范,不与特定的编程语言绑定在一起。在ruoyi框架中,常用的Java实现是jjwt项目,它是一个开源项目,可以在GitHub上找到它的源代码。 要在ruoyi框架中使用JWT,首先需要在项目的pom.xml文件中添加JWT依赖项。可以通过添加如下代码来引入java-jwt依赖: ```xml <!-- jwt jar --> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.4.0</version> </dependency> ``` 接下来,可以通过在ruoyi框架中增加JWT登录方法来实现JWT认证。通常,可以使用一个名为JwtAuthenticationTokenFilter的认证过滤器来处理认证逻辑。 该过滤器继承自OncePerRequestFilter类,表示它只会过滤一次。在该过滤器中,可以实现JWT的验证逻辑,包括解析和验证JWT,获取用户信息等。 通过在ruoyi框架中实现JWT认证,可以实现基于JWT的身份认证和授权机制,提供更安全、可靠的权限管理功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [若依管理系统自学笔记二:JWT](https://blog.csdn.net/HDUCheater/article/details/119141978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [若依集成jwt实现登录授权访问(单体版)](https://blog.csdn.net/qq_19309473/article/details/123650385)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值