登录:http basic 登录鉴权
基本概念
Basic身份认证,是HTTP 1.0中引入的认证方案之一。工作原理是允许HTTP用户代理在请求时,用户提供用户名和密码,实现对用户身份的验证。虽然方案比较古老,还存在安全缺陷,但实现简单,至今仍有不少网站在使用它。
在 Basic 认证中,有三个关键的要素:
- userid:用户的 id,也就是我们常说的用户名。
- password:用户密码。
- realm:领域,当然认证的保护范围。
同一个 server,访问受限的资源多种多样,可以针对不同的资源定义不同的 realm,并且只允许特定的用户访问。
基本认证流程图
第一步:用户访问请求受限资源
用户访问受限资源 /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
第四步:获得请求资源
服务端验证请求
服务端收到用户的认证请求后,对请求进行验证,包含如下步骤:
- 根据用户请求资源的地址,确定资源对应的
realm - 解析
Authorization请求首部,获得用户名、密码;否则返回401(Unauthorized). - 判断用户是否有访问该 realm 的权限;若无权限,返回
403(Forbidden). - 验证用户名、密码是否匹配;若不匹配,,返回
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),