HTTP Basic Access Authentication Schema
- 背景
- 介绍
- 流程
- 安全缺陷
- 参考
背景
本文内容大多基于网上其他参考文章及资料整理后所得,并非原创,目的是为了需要时方便查看。
介绍
HTTP Basic Access Authentication Schema,HTTP 基本访问认证模式,是 HTTP 1.0 引入的一种 基于 challenge-response 认证机制的身份认证方案。
challenge-reponse:当客户端首次访问受保护资源时,服务器会向客户端发送一个 challenge,客户端根据 challenge 信息做出对应的 response。
HTTP Basic Access Authentication 基于以下模型:客户端必须使用每个域(realm)对应的用户ID和密码进行认证。因此 HTTP Basic Access Authentication 包含三个关键要素:user ID(用户ID)、password(密码)、realm(域)。其中 realm 是服务器分配的一个字符串,用于区分受保护资源所属的不同域。只有当服务器能够验证请求URI对应域的用户ID和密码时,服务器才会为请求提供服务,没有其他可选的认证参数。
流程
- 客户端请求访问受保护资源;
- 服务端接收到请求后,在请求头部(HTTP Request Headers)中未找到
Authorization
,返回401 Unauthorized
,返回响应头(HTTP Response Headers)中带有WWW-Authenticate
,格式如下:
这就是服务器向客户端发送的 challenge,其中WWW-Authenticate: Basic realm="Secure Area"
Basic
指明服务器需要的访问认证方式,realm 是服务器分配的一个字符串,用于标识请求 URI 对应的受保护域。WWW-Authenticate
中至少包含一个 challenge。 - 客户端根据接收到的服务器响应中
WWW-Authenticate
信息得知需要执行Basic
访问认证,如果客户端是浏览器,则会自动弹出一个登录窗口,输入用户ID和密码后提交认证请求。客户端发送的认证请求中包含Authorization
头信息,格式如下:
这就是客户端向服务器发送的 response,其中Authorization: Basic YWRtaW46MDAwMDAw
Basic
指明客户端遵从的访问认证方式,后面紧跟一个 Base64 编码值,通过以下公式计算所得:base64(userid:password)
- 服务端收到请求后执行验证,成功返回
200 OK
,失败返回401 Unauthorized
:- 根据用户请求的资源地址确定资源对应的 realm;
- 解析请求头中
Authorization
,获得用户ID和密码; - 判断用户是否有访问 realm 的权限;
- 验证用户ID和密码是否匹配。
安全缺陷
- 用户ID和密码通过明文传输,如果未启用传输层加密,则密码可轻易被中间人截获;
- 认证一旦通过就无法随时吊销。
参考
RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication