基本认证机制
认证
给出一些身份证明,像出示护照或驾照一样证明自己的身份
HTTP的质询/相应认证框架
HTTP提供了原生的质询/相应框架,简化了对用户的认证过程
当用户发起请求时,要附上保密证书(用户名和密码),如果证书不匹配,服务器可以再次质询客户端或产生一条错误信息。如果证书匹配,就可以完成正常请求
认证协议与首部
步骤 | 首部 | 描述 | 方法/状态 |
---|---|---|---|
请求 | 第一条请求没有认证信息 | GET | |
质询 | WWW-Authenticate | 服务器用401状态拒绝了请求,说明需要用户提供用户名和密码 | 401 Unauthorized |
授权 | Authorization | 客户端重新发出请求,但这次会附加一个Authorization首部,用来说明认证算法、用户名和密码 | GET |
成功 | Authentication-Info | 如果授权证书是正确的,服务器就会将文档返回。有些授权算法会在可选的Authentication-Info首部返回一些与授权会话相关的附加信息 | 200 OK |
安全域
设置不同的域,不同的用户对于各个安全域的访问权限是不同的。
例如:公司的CEO能够访问销售额预测资料,但是不能访问员工的家庭域
1 |
|
不同的域认证密码也不同
基本认证
Base-64 用户名/密码编码
HTTP基本认证将(由冒号分隔的)用户名和密码打包在一起,并用Base-64编码方式对其进行编码
代理认证
中间的代理服务器也可以实现认证功能,有些组织会在用户访问服务器、LAN或无线网络之前,用代理服务器进行验证
通过代理服务器提供对某组织内部资源的统一访问控制是一种很便捷的方式
但是代理认证的状态码和首部会有差异
Web服务器 | 代理服务器 |
---|---|
Unauthorized status code: 401 | Unauthorized status code: 407 |
WWW-Authenticate | Proxy-Authenticate |
Authorization | Proxy-Authorization |
Authentication-info | Proxy-Authentication-info |
基本认证的安全缺陷
基本认证简单便捷,但是不安全,只能用它来防止非恶意用户无意间进行的访问,或将其与SSL这样的加密技术配合使用
基本认证存在下列安全缺陷
(1)基本认证会通过网络发送用户名和密码,这些用户名和密码都是以一种很容易解码的形式表示的。如果有动机的第三方用户有可能会去拦截,那就需要使用SSL加密通道发送所有HTTP事务,或者使用更安全的认证协议,比如摘要认证
(2)即使密码以更难解码的方式加密,第三方仍然可以捕获被修改过的用户名和密码,并将它一次次的重放给原始服务器以获得对服务器的访问权
(3)即使基本认证用于一些不太重要的应用程序,有心人可能拦截它然后去尝试破解用户的银行账户
(4)基本认证没有提供任何针对代理和作为中间人的中间节点的防护措施,它们没有修改认证首部,但却修改了报文的其余部分,这样就严重改变了事务的本质
(5)假冒服务器很容易骗过基本认证。如果在用户时间连接到一台恶意服务器或网关的时候,可能骗取用户的密码并捏造错误信息欺骗用户
总的来说,在友好的环境,或者隐私保护不是十分必要的环境中,基本认证足矣
其他情况可能需要考虑更安全的技术