HTTP使用的认证方式
-BASIC
认证(基本认证)
-DIGEST
认证 (摘要认证)
-SSL
客户端认证
-FormBase
认证 (基于表单认证)
BASIC
认证
基本认证是从
HTTP/1.0
就存在的认证方式
1、当请求的资源需要进行BASIC
认证时,服务端会随401状态码返回带WWW-Authenticate
头部字段的报文。该头部字段内含认证方式(BASIC
)和Request-uri安全域字符串(realm
)
2、客户端为了通过BASIC
认证需要将用户账号密码发送到服务器。以 (账号:密码)的形式经过BASE6编码写入Authorization
字段发送请求。
3、服务端验证通过则返回200状态码及请求的资源,若失败则继续返回401。
BASIC
认证虽然将账号密码经过BASE64
编码但是没有任何加密,一旦被窃听风险极高。- 一般浏览器无法执行注销操作。
DIGEST
认证
1、客户端请求。
2、服务端返回401状态码、WWW-Authenticate
字段中包含realm(认证方式),nonce(随机数)。
3、客户端根据质询码计算出响应码(response)。客户端发出的信息如下:
- realm:服务端传回的质询码中的。
- nonce:服务端传回的质询码中的。
- username: realm限定范围内可进行认证的用户编号。ID
- uri:访问的资源。
- response:由质询码计算出的用于登陆的响应。
4、服务端认证通过返回客户端请求的资源,若失败则返回401。
SSL
认证
1、SSL认证过程。
- 客户端发送请求。
- 服务端将公钥发送给客户端
- 客户端验证证书,符合要求则将自己的公钥发送给服务端
- 服务端验证证书,若符合要求则开始HTTP加密通信。
2、SSL客户端采用双因素认证
双因素不仅需要账号密码,还需要申请认证者其他认证信息。
- 证书
- 表单
3、SSL客户端证书需要一定费用
FormBase
认证(表单认证 )
Session
管理及Cookie
应用
- 客户端把用户名密码等登陆信息发送至服务器。
服务端会发放用以识别用户信息的
Session ID
。通过验证从客户端发来的登陆信息进行用户验证,将Session ID
在服务端与用户认证状态一起保存起来。因此Session ID
会是认证凭证,如果Session ID
被盗走,那么就可以伪装成你的身份。- Session ID应用难以揣测的字符串,服务端也应该将
Session ID
设置安全期限 - 为了减少跨站脚本攻击(
xss
)带来的危害,应在Cookie
字段内加入httponly
属性。
- Session ID应用难以揣测的字符串,服务端也应该将
客户端接收到服务端返回的
Session ID
之后将之缓存在本地,下次请求时浏览器会自动发送Cookie
,因此Session ID
也会被自动发送