一. Basic 认证
客户端以“ : ”连接用户名和密码后,再经BASE64编码( Base64 Content-Transfer-Encoding )通过Authorization请求头发送该密文至服务端进行验证,每次请求都需要重复发送该密文。可见Basic认证过程简单,安全性也低,存在泄露个人账号信息以及其他诸多安全问题,最好在实现了Transport Layer Security (TLS)的情况下去使用。以下仅为原理演示,不代表真实情况:
- 客户端向服务器请求数据:
GET / HTTP/1.1
Host: www.myrealm.com - 服务端向客户端发送验证请求401:
HTTP/1.1 401 Unauthorised
Server: bfe/1.0.8.18
WWW-Authenticate: Basic realm="myrealm.com"
Content-Type: text/html; charset=utf-8 - 客户端收到401返回值后,将自动弹出一个登录窗口,等待用户输入用户名和密码
- 将“用户名:密码”进行BASE64加密后发送服务端进行验证:
GET / HTTP/1.1
Host: www.myrealm.com
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx - 服务端取出Authorization请求头信息进行解密,并与用户数据库进行对比判断是否合法,合法将返回200 OK。RFC 2617 规格中Basic认证不发送Authentication-Info头部,Authentication-Info头部是Digest认证中新增的
二. Digest 认证