常用用户认证方式简介
Http Basic Auth
简单,每次请求都需要提供用户username、password,暴露的风险大不安全,生产环境不要使用。
基于Cookie认证
一次登录请求中在服务器端创建Session对象,保存用户相关信息并返回唯一sessionId,客户端浏览器会创建一个Cookie对象存放sessionId,以后的请求会携带sessionId用于认证。存在CSRF风险,可通过设置Refer来避免。
Token认证
和基于Cookie认证相比的好处:
- 支持跨域访问
Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输. - 无状态
在服务器端无需存储Session信息,因为Token本身包含了所有登录用户的信息,只需在客户端的cookie或local storage、 session storage中存储即可。 - 更适用于移动应用
原生应用不支持Cookie,需进行特殊处理。 - CSRF
因为不再依赖于Cookie,所以就不需要考虑对CSRF(跨站请求伪造)的防范。 - 性能
使用Token认证仅需要对Token进行验证和解析。基于Cookie则需要服务器存储Session信息,甚至认证还需要去查询数据库。 - 基于标准化
API可以采用标准化的JSON Web Token (JWT)。这个标准已经有多个后端库(.NET, Ruby, Java, Python, PHP)的支持。
OAuth认证
是一种开放授权标准,允许让第三方应用访问该用户在某web服务上存储的资源,不需将用户名密码提供给第三方应用。