本文简介 HTTP Basic,Session,Token 三种认证方法。数据库
这是一种最基本的认证方法。跨域
在这种认证方法下,用户每次发送请求时,请求头中都必须携带能经过认证的身份信息。浏览器
其交互过程以下:安全
Basic
方法进行认证: WWW-Authenticate: Basic
。Authorization: Basic aHk6bXlwYXNzd29yZA==
。客户端 服务端
------ ------
1----------------------------------------->
GET / HTTP/1.1
<-------------------------2
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic
3----------------------------------------->
GET / HTTP/1.1
Authorization: Basic aHk6bXlwYXNzd29yZA==
<------------------------4
HTTP/1.1 200 OK
5----------------------------------------->
GET /another-path/ HTTP/1.1
Authorization: Basic aHk6bXlwYXNzd29yZA==
复制代码
其中传送的身份信息是 <username>:<password>
经 base64 编码后的字串。如本例中的 aHk6bXlwYXNzd29yZA==
, 经 base64 解码后为 hy:mypassword
。bash
这种认证方法的优势是简单,容易理解。服务器
缺点有:编码
这种认证方法结合了 Session 和 Cookie。服务端将本次会话信息以 Session 对象的形式保存在服务端的内存、数据库或文件系统中,并将对应的 Session 对象 ID 值 SessionID 以 Cookie 形式返回给客户端,SessionID 保存在客户端的 Cookie 中。spa
这是一种有状态的认证方法:服务端保存 Session 对象,客户端以 Cookie 形式保存 SessionID。.net
其交互过程以下:3d
优势:
缺点:
这是一种 SPA 应用和 APP 常常使用的认证方法。它是一种无状态的认证方法。
客户端首先将用户信息发送给服务端,服务端根据用户信息+私钥生成一个惟一的 Token 并返回给客户端。Token 只保存在客户端,以后客户端的每一个请求头中都携带 Token,而服务端只经过运算(无需查询)来验证用户。
客户端 服务端
------ ------
1----------------------------------------->
GET / HTTP/1.1
<-------------------------2
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Token
3----------------------------------------->
GET / HTTP/1.1
Authorization: Token f613d789819ff93537ee6a
<------------------------4
HTTP/1.1 200 OK
5----------------------------------------->
GET /another-path/ HTTP/1.1
Authorization: Token f613d789819ff93537ee6a
复制代码
优势:
缺点:
目前使用较多的是基于JWT(JSON Web Tokens) 的 Token 认证法。