Hibop / Hibop.github.io

Hibop 个人博客
https://hibop.github.io/
23 stars 1 forks source link

关于cookie、tooken验证 #42

Open Hibop opened 5 years ago

Hibop commented 5 years ago

from: https://auth0.com/blog/cookies-vs-tokens-definitive-guide/要点翻译

Cookie

cookie 验证是用于长时间用户验证,cookie 验证是有状态的,意味着验证记录或者会话需要一直在服务端和客户端保持。服务器需要保持对数据库活动会话的追踪,当在前端创建了一个 cookie,cookie 中包含了一个 session 标识符。传统 cookie 会话的验证流程:

Token

token 验证是无状态的,服务器不记录哪些用户登录了或者哪些 JWT 被发布了,而是每个请求都带上了服务器需要验证的 token,token 放在了 Authorization header 中,形式是 Bearer { JWT },但是也可以在 post body 里发送,甚至作为 query parameter。 验证流程:

Token 验证的优势

token遗留的一些问题;

关于认证,开放平台有两种认证方式,一种是Basic Auth,一种是OAuth。

一、Basic Auth(HTTP Auth) Basic Auth简单点说明就是每次请求API时都提供用户的username和password。包括:

基于session认证所显露的问题: Session: 每个用户经过我们的应用认证之后,我们的应用都要在服务端做一次记录,以方便用户下次请求的鉴别,通常而言session都是保存在内存中,而随着认证用户的增多,服务端的开销会明显增大。

扩展性: 用户认证之后,服务端做认证记录,如果认证的记录被保存在内存中的话,这意味着用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源,这样在分布式的应用上,相应的限制了负载均衡器的能力。这也意味着限制了应用的扩展能力。

CSRF: 因为是基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。

有两种基于 Token 的认证方案 JWT/Oauth2.0

Basic Auth优点: ①使用非常简单, ②开发和调试工作简单, ③没有复杂的页面跳转逻辑和交互过程; ④更利于发起方控制;

Basic Auth缺点: ①安全性低,每次都需要传递用户名和密码,用户名和密码很大程度上存在被监听盗取的可能; ②同时应用本地还需要保存用户名和密码,在应用本身的安全性来说,也存在很大问题; ③开放平台服务商出于自身安全性的考虑(第三方可以得到该服务商用户的账号密码,对于服务商来说是一种安全隐患),未来也会限制此认证方式(Twitter就计划在6月份停止Basic Auth的支持) ④用户如果更改了用户名和密码,还需要重新进行密码校验的过程。

二、OAuth OAuth为用户资源的授权提供了一个安全、开放的标准,它分为几个交互过程: 1)应用用APP KEY和APP SECRET换取OAuth_token; 2)应用将用户引导到服务商的页面对该OAuth_token进行授权(可能需要输入用户名和密码); 3)服务商的页面跳转回应用,应用再根据参数去服务商获得Access Token; 4)使用这个Access Token就可以访问API了。

OAuth的优点: ①安全性高,用户的账户和密码只需要提供一次,而且是在服务商的页面上提供,防止了Basic Auth反复传输密码带来的安全隐患; ②Access Token访问权限仅限于应用,被窃取不会影响用户在该服务商的其他服务; ③Access Token即使被监听丢失了随时可以撤销,不像密码丢失可能就被别人篡改了; ④用户修改了密码也不会影响该应用的正常使用。