基本认证机制
认证
HTTP的质询/响应认证框架
HTTP 提供了一个原生的质询/响应 框架,简化了对用户的认证过程。
Web 应用程序收到一条 HTTP 请求报文时,服务器没有按照请求执行动作,而是以一个认证质询进行响应,要求用户来提供一些保密信息来说明他是谁,从而对其进行质询。
用户再次发起请求时,要附上保密证书(用户名和密码)。如果证书不匹配,服务器可以再次质询客户端,或产生一条错误信息。如果证书匹配就可以正常完成请求了。
认证协议与首部
HTTP 通过一组可定制的控制首部,为不同的认证协议提供了一个可扩展框架。列出的首部和内容会随从认证协议的不同而发生变化。认证协议也是在 HTTP 认证首部指定的。
HTTP 定义了两个官方认证的协议,基本认证和摘要认证。今后人们可以随意设计一些使用 HTTP 质询/响应框架的新协议。
认证的四个步骤:
认证流程.png
服务器对用户进行质询时,会返回一条 401 Unauthorized 响应,并在 www-Authenticate,首部说明如何已经在哪里认证。
当客户端授权服务器继续处理时,会重新发送请求,但会在 Authorization 首部附上加密的密码和其他一些认证参数。
授权请求成功完成时,服务器会返回一个正常的状态码(比如,200 OK);对高级认证算法来说,可能还会在 Authentication-Info 首部返回一些会话相关的附加信息。
域
HTTP 怎样允许不同的服务器使用不同的访问权限的,www-Authenticate 质询中包含了一个 realm 指令。Web服务器会将受保护的文档组织成一个安全域。每个安全域都可以有不同的授权用户集。
下面是一个基本的认证质询,他指定了一个域:
HTTP/1.0 401 Unauthorized
www-Authenticate: Basic realm="Corporate Financials"
域应该有一个描述性的字符名,比如:"Corporate Financials"(公司财务资料),以帮助用户了解应该使用哪个用户名和密码。在安全域的名称中列出服务器的主机名也是很有帮助的。
基本认证
基本认证实例
- 用户请求了私人家庭相片 /family/jeff.jpg
- 服务端回送一条 401 Unauthorized Required.对私人家庭相片进行密码质询,同时回送的还有 www-Authenticate 首部。这个首部请求对Family域进行基本认证。
- 浏览器收到了 401 质询,弹出对话框,询问 Family 域的用户名和密码,用户输入用户名和密码时,浏览器会用一个冒号将其连接起来,编码成经过扰码的 Base-64 表现形式(下节介绍),然后将其放在Authenticate首部中回送。
- 服务器对用户名和密码进行解码,验证他们的正确性,然后用一条 HTTP 200 OK 报文返回所请求的报文。