Web开发中常见的认证机制

HTTP基本认证(HTTP Basic Auth)

在HTTP中,HTTP基本认证是一种容许Web浏览器或者其余客户端在请求时提供用户名口令形式的身份凭证的一种登陆验证方式。html

简单而言,HTTP基本认证就是咱们平时在网站中最经常使用的经过用户名和密码登陆来认证的机制。
优势
HTTP 基本认证是基本上全部流行的网页浏览器都支持。可是基本认证不多在可公开访问的互联网网站上使用,有时候会在小的私有系统中使用。
缺点
HTTP 基本认证虽然足够简单,可是前提是在客户端和服务器主机之间的链接足够安全。若是没有使用SSL/TLS这样的传输层安全的协议,那么以明文传输的密钥和口令很容易被拦截。
因为现存的浏览器保存认证信息直到标签页或浏览器关闭,或者用户清除历史记录。致使了服务器端没法主动来当前用户登出或者认证失效。前端

OAuth(开放受权)

OAuth 是一个开放标准,容许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表等),而无需将用户名和密码提供给第三方应用。
OAuth 容许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每个令牌受权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户能够受权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非全部内容。
现存在OAuth 1.0OAuth 2.0两种协议,两者互不兼容。
OAuth 2.0 运行流程vue

流程引用自OAuth2.0 RFC 6749:https://tools.ietf.org/html/r...ios

图片描述

  • (A)客户端(Client)向资源拥有者(Resource Owner)发送受权请求(Authorization Request)git

  • (B)资源拥有者受权许可(Authorization Grant)github

  • (C)客户端向验证服务器(Authorization Server)发送经过(B)获取的受权许可web

  • (D)验证服务器验证受权许可,经过的话,则返回Access Token给客户端redis

  • (E)客户端经过Access Token 访问资源服务器(Resource Server)数据库

  • (F)资源服务器返回受保护的资源(Protected Resource)axios

这种基于OAuth的认证机制很是适用于我的消费者类的互联网应用产品,如社交类等等。一些大的互联网公司也都提供OAuth机制的API,如豆瓣、微信JS-SDK。

Cookie/Session 认证机制

Cookie 是由客户端保存的小型文本文件,其内容为一系列的键值对。Cookie 是由 HTTP 服务器设置的,保存在浏览器中。Cookie会随着 HTTP请求一块儿发送。
Session 是存储在服务器端的,避免在客户端 Cookie 中存储敏感数据。Session 能够存储在 HTTP 服务器的内存中,也能够存在内存数据库(如redis)中。
Cookie/Session认证机制就是为一次请求认证在服务端建立一个Session对象,同时在客户端的浏览器端建立了一个Cookie对象;经过客户端带上来Cookie对象来与服务器端的session对象匹配来实现状态管理的。默认的,当咱们关闭浏览器的时候,cookie会被删除。但能够经过修改cookie 的expire time使cookie在必定时间内有效;

基于 Token 的认证机制

基于 Token的认证机制,有着无需长期保存用户名和密码,服务器端能主动让token失效等诸多好处,很是实用于 Web 应用和 App 已经被不少大型网站采用,好比Facebook、Github、Google+等。其流程以下:

  1. 客户端使用用户名和密码请求登陆

  2. 服务端收到请求,去验证用户名与密码

  3. 验证成功后,服务器会签发一个 Token, 再把这个 Token 发送给客户端

  4. 客户端收到 Token 之后能够把它存储起来,如Cookie或者Web Storage

  5. 客户单每次向服务端请求资源的时候,都须要带着服务器端签发的 Token

  6. 服务器端收到请求,验证客户端请求里面带着的 Token,若是验证成功,就向客户端返回请求的数据;否的话,则返回对应的错误信息。

可是存储在客户端的 Token 存在几个问题:

  1. 存在泄露的风险。若是别人拿到你的 Token,在 Token过时以前,均可以以你的身份在别的地方登陆

  2. 若是存在 Web Storage(指sessionStorage和localStorage)。因为Web Storage 能够被同源下的JavaScript直接获取到,这也就意味着网站下全部的JavaScript代码均可以获取到web Storage,这就给了XSS机会

  3. 若是存在Cookie中。虽然存在Cookie可使用HttpOnly来防止XSS,可是使用 Cookie 却又引起了CSRF

对于泄露的风险,能够采起对Token进行对称加密,用时再解密。
对于XSS而言,在处理数据时,都应该 escape and encode 全部不信任的数据。
与CSRF相比,XSS更加容易防范和意识到,所以并不建议将Token存在Cookie中。
最后,网站或者应用必定要使用HTTPS。毕竟在网络层面上 Token 明文传输的话,仍是很是的危险。

关于基于Token认证机制的项目能够参考:一个项目学会前端实现登陆拦截
以上是我我的的见解,若有错误,欢迎指出。

参考资料

维基百科-HTTP基本认证

维基百科-OAuth

相关文章
相关标签/搜索