登录:Http Basic

394 阅读3分钟

登录:http basic 登录鉴权

基本概念

Basic 身份认证,是 HTTP 1.0 中引入的认证方案之一。工作原理是允许 HTTP 用户代理在请求时,用户提供用户名和密码,实现对用户身份的验证。虽然方案比较古老,还存在安全缺陷,但实现简单,至今仍有不少网站在使用它。

在 Basic 认证中,有三个关键的要素:

  1. userid:用户的 id,也就是我们常说的用户名。
  2. password:用户密码。
  3. realm:领域,当然认证的保护范围。

同一个 server,访问受限的资源多种多样,可以针对不同的资源定义不同的 realm,并且只允许特定的用户访问。

image.png

基本认证流程图

image.png

第一步:用户访问请求受限资源

用户访问受限资源 /protected_docs。请求报文如下:

GET /protected_docs HTTP/1.1
Host: 127.0.0.1:3000

第二步:服务端返回 401 要求身份认证

服务端发现 /protected_docs 为受限资源,于是向用户发送 401 状态码,要求进行身份认证。

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm=protected_docs

// Basic 认证方案
// realm 认证的范围

第三步:用户发送认证请求

用户收到服务器响应后,填写用户名、密码,然后向服务器发送认证请求。

以下为请求报文,Authorization 请求里包含了输入的用户名和密码。

GET /protected_docs HTTP/1.1
Authorization: Basic Y29kZXJ5Y3M6MTIzNDU2

// Buffer.from('coderycs:123456').toString('base64'); // Y29kZXJ5Y3M6MTIzNDU2

image.png

第四步:获得请求资源

image.png

服务端验证请求

服务端收到用户的认证请求后,对请求进行验证,包含如下步骤:

  1. 根据用户请求资源的地址,确定资源对应的 realm
  2. 解析 Authorization 请求首部,获得用户名、密码;否则返回 401(Unauthorized).
  3. 判断用户是否有访问该 realm 的权限;若无权限,返回 403(Forbidden).
  4. 验证用户名、密码是否匹配;若不匹配,,返回 401(Unauthorized).

一旦验证通过,则返回请求资源。

知识补充

环回地址

127.0.0.1 是主机环回地址。计算机是数据包的发送者也是接收者。默认情况下 localhost 是引用 127.0.0.1 的简写。

Authentication = 身份认证 = 身份验证 = 鉴权 = 通俗:确认你说的你是谁

生活中:高铁的验票乘车、手机的密码、指纹或面部识别解锁、支付宝或者微信的支付密码……等

web开发中:各大网站的手机验证码登录、邮箱密码登录、二维码登录……等

HTTP无状态协议,是指协议对于交互性场景没有记忆能力。如超市收银员无记忆能力。

  • session-cookie

Cookie保存在客户端浏览器中,而Session保存在服务器上。

服务端在接收到来自客户端的首次访问时,会自动创建 Session(将 Session 保存在内存中,也可以保存在 Redis 中),然后给这个 Session 生成一个唯一的标识字符串会话身份凭证 session_id(通常称为 sid),

参考链接

  1. 前端开发登录鉴权方案完全梳理
  2. 总结cookie的一些问题
  3. 一文读懂HTTP Basic身份认证
  4. HTTP官网
  5. 什么是Http无状态?Session、Cookie、Token三者之间的区别
  6. Web身份认证——【 Cookie认证 】
  7. 30s 看懂最基础的认证方式: Session-Cookie 认证
  8. Express中app.use()用法
  9. Node.js开发入门—使用cookie保持登录
  10. 登录、校验之cookie与session(Node.js、Koa2)