• 欢迎访问极客猴,分享 Python 入门,网络爬虫,数据分析,赚钱思维相关的技术与思维QQ群
  • 本站点文章首发于微信公众号【极客猴】,欢迎关注,第一时间接受文章推送~
  • 如果您觉得本站非常有看点,那么赶紧使用 Ctrl+D 收藏极客猴吧

账号认证那些事

猴哥随笔 猴哥 2年前 (2018-12-20) 15次浏览 0个评论
文章目录[隐藏]

QQ 承载着我们一代人的青春和记忆,一个账号和密码就能体验 QQ 各种功能。而微信作为一款国民级应用,是每个人手机必安装的软件,同样也需要一个账号登陆才能使用。纵观各种社交应用、网站,往往都是离不开账号体系。

账号体系中有个重要的功能是账号登录,账号登录涉及到身份认证方法。我们在模拟登录网站去进行数据采集时,经常需要跟网站的身份认证“斗智斗勇”。因此,让我们来扒一扒其中的一些原理。

1.基本身份验证

我们写的爬虫都是采用 HTTP/HTTPS 协议。HTTP 协议中有种名为 Basic Authentication(基本身份验证)的验证方式。这种认证方式在 HTTP/1.0 就定义了。

它的原理是在请求的 Headers 中增加 Authorization 字段,该字段的值是将“用户名:密码”的经过 Base64 编码之后的字符串;然后将其发送给服务器端做校验。

我们进一步理解 HTTP 基本认证的过程:

1.客户端发送 Request 给服务端。

2.因为 Request 的 Headers 中没有包含 Authorization 字段,服务器会返回一个 401 错误给客户端。

3.客户端把用户名和密码用 base64 编码之后,放在 Authorization header 中发送给服务器进行验证。

4.服务端将 Authorization header 中的用户名和密码取出来,进行验证,如果验证通过将根据需求发送资源给客户端。

2.基于 Session 的认证

因为 HTTP 协议是无状态的,所以有人提出 Session 机制来维护服务器和用户之间的状态。

如果需要验证身份,那么在服务端生成用户相关的 Session 数据,然后发给客户端 Session_id 存放到 Cookies 中。客户端下次请求时带上 Session_id 就可以验证服务器端是否存在 Session 数据,以此完成用户认证。这种 Session 认证是网站平常用的比较多。

这种认证方式,可以更好的在服务端对会话进行控制,安全性比较高(Session_id 随机),但是服务端需要存储 Session 数据(如内存或数据库)。

3.基于 Token 的认证

基于 Token(令牌)的认证已经变得更加普遍最近随着 RESTful API 的应用,单页应用程序和微服务的兴起。怎么理解 token 呢?当发出HTTP请求时, token 是验证用户是否有资格访问资源的凭证。

基于令牌的认证流程如下:

1.用户输入账号和密码。

2.服务器验证信息是否正确;如果正确则返回已签名的 token

3.token 储在客户端,最常见的是存储在 local storage 中,但也可以存储在 Session 或 Cookies 中。

4.后面每次 HTTP 请求都在 Header 中带上 token

5.服务端收到 token 通过验证后即可确认用户身,并且如果令牌有效,则接受请求。

6.一旦用户注销,令牌将在客户端被销毁。

基于 token 的用户认证是一种服务端无状态的认证方式,服务端不用存放 token 数据或当前 Session 的记录。这种方式相对 Cookies 的认证方式就简单一些,服务端不用存储认证数据,易维护扩展性强, token 存在 localStorage 可避免 CSRF , web 和 app 应用这用接口都比较简单。不过这种方式在加密或解密的时候会有一些性能开销。

说到基于 Token 的认证,就不得不说下 JWT。JWT 全称是“JSON Web Token”,它是一种基于 Token 的认证标准。

4.OAuth

OAuth 是一种认证协议,允许用户对没有密码的服务器执行认证。 OAuth 存在很多版本,OAuth 1.0,OAuth 1.0a 和 OAuth 2.0。OAuth 认证也是很好理解,就是一些网站或者应用支持第三方登录(QQ、微信、微博等)。

5.OpenID

OpenId 是另一种不需要密码的身份验证协议(类似于OAuth)。它们两者的区别是 :

  • OpenID 强调 验证 Authentication

例如使用 QQ 方式登录知乎。最开始是要请求认证,用户输入 QQ 号和密码,点击登录。腾讯会先进行验证该用户是否为腾讯 QQ 的用户;如果是我的用户,那么腾讯 QQ 会通知知乎说“刚才登录是我腾讯 QQ 的用户,验证没有问题,可以你知乎社区”,这个过程就是认证(Authentication)。

  • OAuth 强调 授权 Authorization

微信一开始是支持 QQ 方式登录,登录时微信会乎会询问允许获取你的 QQ 昵称、头像、性别等信息。这个就是授权(Authorization)。


账号认证那些事

文章首发于微信公众号【极客猴】,欢迎扫码关注获取第一时间推送


极客猴版权所有,内容均为原创丨本网站采用共享 4.0 国际 CC BY-NC-SA 4.0 许可协议
文章标题:账号认证那些事
转载请保留页面地址:https://geekmonkey.top/289.html
喜欢 (0)
[赞赏码]
分享 (0)
猴哥
关于作者:
分享自己总结的Python爬虫,Web开发,数据分析的心得。此外还输出自己的思考内容,涉猎产品知识、个人成长等,每周给你带来头脑大爆炸
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址