Auth-CheatSheet

Auth CheatSheet |权限认证机制概述

可以阅读 Web安全实践清单 了解权限校验、密码规范等安全相关知识。WebAPI或者RPC接口,HTTP CheatSheetDOM CheatSheet/数据存储

Session, cookie, JWT, token, SSO, and OAuth 2.0

  • 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给客户端,并且在Responseheader “WWW-Authenticate” 中添加信息。

第三步:客户端把用户名和密码用BASE64加密后,放在Authorization header中发送给服务器,认证成功。

第四步:服务器将Authorization header中的用户名密码取出,进行验证,如果验证通过,将根据请求,发送资源给客户端

使用Fiddler Inspectors下的Auth选项卡,可以很方便的看到用户名和密码

HTTP基本认证的优点

HTTP基本认证,简单明了。Rest API就是经常使用基本认证的。

每次都要进行认证

http协议是无状态的,同一个客户端对 服务器的每个请求都要求认证。

基于Session的认证

CookieSession的存在主要是为了解决HTTP这一无状态协议下服务器如何识别用户的问题,其原理就是在用户登录通过验证后,服务端将数据加密后保存到客户端浏览器的Cookie中,同时服务器保留相对应的Session(文件或DB。用户之后发起的请求都会携带Cookie信息,服务端需要根据Cookie寻回对应的Session,从而完成验证,确认这是之前登陆过的用户。其工作原理如下图所示:

image

基于Token的认证

JSON Web Token

OAuth

认证策略

单点登录

2FA双因子认证

下一页