Auth CheatSheet |权限认证机制概述
可以阅读 Web安全实践清单 了解权限校验、密码规范等安全相关知识。WebAPI或者RPC接口,HTTP CheatSheet,DOM CheatSheet/数据存储。
- WWW-Authenticate是最基本的方法,浏览器会要求你提供用户名和密码。由于无法控制登录的生命周期,现在已经很少使用了。
- 对登录生命周期的更精细的控制是session-cookie。服务器保持会话存储,而浏览器则保持会话的ID,一个cookie通常只适用于浏览器,对移动应用不友好。
- 使用token来解决兼容性问题,客户端将令牌发送给服务器,而服务器则验证令牌的有效性。缺点是需要对令牌进行加密和解密,这可能很耗时。
- JWT是一种代表令牌的标准方式。这种信息可以被验证和信任,因为它是数字签名的。由于JWT包含签名,所以不需要在服务器端保存会话信息。
- 通过使用SSO(单点登录),你可以只登录一次,并登录到多个网站。它使用CAS(中央认证服务)来维护跨网站信息
- 通过使用OAuth 2.0,你可以授权一个网站访问你在另一个网站的信息
HTTP Basic认证
桌面应用程序也通过HTTP协议跟Web服务器交互,桌面应用程序一般不会使用cookie,而是把"用户名+冒号+密码"用BASE64算法加密后的字符串放在http request中的header Authorization中发送给服务端,这种方式叫HTTP基本认证(Basic Authentication)
当浏览器访问使用基本认证的网站的时候,浏览器会提示你输入用户名和密码,如下图
假如用户名密码错误的话,服务器会返回401如下图
HTTP基本认证的过程
第一步:客户端发送http request给服务器,
第二步:因为request中没有包含Authorization header,服务器会返回一个401 Unauthozied给客户端,并且在Response的header “WWW-Authenticate” 中添加信息。
第三步:客户端把用户名和密码用BASE64加密后,放在Authorization header中发送给服务器,认证成功。
第四步:服务器将Authorization header中的用户名密码取出,进行验证,如果验证通过,将根据请求,发送资源给客户端
使用Fiddler Inspectors下的Auth选项卡,可以很方便的看到用户名和密码
HTTP基本认证的优点
HTTP基本认证,简单明了。Rest API就是经常使用基本认证的。
每次都要进行认证
http协议是无状态的,同一个客户端对 服务器的每个请求都要求认证。
基于Session的认证
Cookie与Session的存在主要是为了解决HTTP这一无状态协议下服务器如何识别用户的问题,其原理就是在用户登录通过验证后,服务端将数据加密后保存到客户端浏览器的Cookie中,同时服务器保留相对应的Session(文件或DB)。用户之后发起的请求都会携带Cookie信息,服务端需要根据Cookie寻回对应的Session,从而完成验证,确认这是之前登陆过的用户。其工作原理如下图所示:
基于Token的认证
JSON Web Token
OAuth
认证策略
单点登录
2FA双因子认证