模拟登录基本介绍

模拟登录的基本原理

模拟登录一般主要分为两种模式:

1. 基于 Session 和 Cookie

2. 基于 JWT (JSON Web Token)

基于 Session 和 Cookie 

不同的网站对于用户登录状态的实现可能不同,但 Session 和 Cookie 一定是相互配合的

Cookie 里可能只保存了 SessionID  相关的信息, 服务器根据这个信息能找到对应的 Session 。当用户登录后, 服务器会在对应的 Session 里标记一个字段, 代表用户已处于登录状态或者其他(如角色,登录时间)。这样一来,用户每次访问网站都要带着 Cookie , 服务器每次都找到对应的 session , 然后看一下用户状态是否为登录状态,再决定返回什么样的结果和执行什么样的操作。

Cookie 里直接保存了某些凭证信息。例如用户发起登录请求,服务器校验通过后,返回给客户端的响应头里可能带有 set-Cookie 字段, 里面就包含着类似凭证的信息, 这样客户端就会执行设置 Cookie 的操作, 将那些类似凭证的信息保存到 Cookie 里,以后再访问网站时都携带着 Cookie,服务器拿着其中的信息进行校验, 自然也能检测登录状态

基于 JWT

Web 开发技术一直在发展,近几年前后端分离的开发模式越来越火,传统的基于 Session 和 Cookie 的校验又存在一定的问题, 例如服务器需要维护登录用户的 Session 信息, 而且分布式部署也不方便, 不太适合前后端分离项目, 所以  JWT 技术应运而生

JWT 的英文全称为 JSON Web Token , 是为了在网络应用环境中传递声明而执行的一种基于 JSON 的开发标准, 实际上就是每次登录时都通过一个 Token 字段来校验登录状态。 JWT 的声明一般用来在身份提供者和服务提供者之间传递认证的用户身份信息, 以便从资源服务器获取资源,此外可以增加一些业务逻辑必须得声明信息, 总之 Token 可以直接用于认证, 也可以传递一些额外的信息

有了 JWT , 一些认证就不要借助 Session 和 Cooke 了, 服务器也无需维护 Session 信息,从而减少了开销,只需要有一个校验 JWT 的功能就够了, 同时还支持分布式部署和跨语言开发

JWT 一般是经过一个 Base64 编码技术加密的字符串, 有自己的标准,可以把 JWT 看成一个三段式的加密字符串。 这三部分分别是 Header , Payload 和  Signature

Header : 声明了 JWT 的签名算法(如 RSA SHA256 等),还可能包含 JWT 编号或者类型等数据

Payload :  通常是一些业务需要但不敏感的信息(如 UserID), 另外还有很多默认字段, 如 JWT 签发者, JWT 接受者, JWT 过期时间等

Signature : 这就是一个签名,是利用秘钥 secret 对 Header, Payload 的信息进行加密后形成的,这个秘钥保存在服务端, 不会轻易泄露。如此一来, 如果 Payload 的信息被篡改,服务器就能通过 Signature 判断出这事非法请求, 拒绝提供服务

登录认证流程也很简单了, 用户通过用户名和密码登录, 然后服务器生成 JWT 字符串返回给客户端,之后客户端每次请求都带着这个 JWT , 服务器就会自动判断其有效情况, 如果有效就返回对应的数据。 JWT 的传递方式多种多样, 可以放在请求头, 也可以放在 URL 里, 甚至有的网站把它放在  Cookie 里, 但总而言之, 把它传递给服务器校验就行了

模拟登录

基于 Session 和 Cookie

如果要用爬虫实现基于 Session 和 Cookie  的模拟登录, 最主要就是要维护好 Coolie 信息, 因为爬虫相当于客户端的浏览器, 我们把浏览器要做的事情模拟好就行了。 

1. 如果已经在浏览器登录了自己的账号, 那么可以直接把 Cookie 复制给爬虫。这是最省时省力的方式, 相当于手动在浏览器登录。我们把 Cookie 放到爬虫代码中,爬虫每次请求的时候都将其放在请求头中,可以说是完全模拟了浏览器的操作。之后服务器的动作就和前面介绍的一样, 通过Cookie 校验登录状态,如果校验没问题, 就执行某些操作或返回某些内容

2. 如果想让爬虫完全自动化操作,那么可以直接使用爬虫模拟登录过程。大多数时候,登录过程就是一个 POST 请求。用爬虫把用户名和密码登信息提交给服务器, 服务器返回的响应头里面可能会有 set-Cookie 字段, 我们只需要把这个字段里的内容保存下来就行了。所以,最主要的是把这个过程中的 Cookie 维持好, 当然可能遇到一些困难,例如登录过程中遇到一些校验参数,不好直接模拟登录请求,客户端设置 Cookie 的过程是通过 JavaScript 语言实现的, 所以可能还得仔细分析其中的逻辑, 尤其是用 requests 这样的请求库进行模拟登录时,遇到的问题总是会比较多

3. 可以用一些简单的方式模拟登录, 即实现登录过程自动化。例如 Selenium, Pyppeteer 或 Playwright 驱动浏览器模拟执行一些操作(如填写用户名密码,提交表单等)登录成功后, 通过 Seenium 或 Pyppeteer 获取当前的浏览器的 Cookie 并保存。 同样就可以拿着 Cookie 的内容发起请求,实现模拟登录

基于JWT

基于JWT 的模拟登录思路也比较清晰, 由于 JWT 的字符串就是用户访问的凭证, 所以模拟登录只需要做到下面几步

1. 模拟登录操作, 例如拿着用户名和密码信息请求登录接口, 获取服务器返回的结果, 这个结果中通常包含 JWT 信息, 将其保存下来即可

2. 之后发送给服务器的请求均携带 JWT 。 在 JWT 不过期的情况下,通常能正常访问和执行操作。携带方式因网站而异

3. 如果 JWT 过期了, 可能需要再次做第一步, 重新获取 JWT

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值