OAuth 是 open authorization 的简写,意思是开放受权。下面是维基百科的解释:html
OAuth的标志
开放受权(OAuth)是一个开放标准,容许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。OAuth容许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每个令牌受权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户能够受权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非全部内容。git
某乎上有人作了一番形象化的解释:github
打比方我约了一个空调工帮忙维修空调,可是这天我恰好不在家。我能够留一把钥匙给他,但又怕不安全。好比他可能回去配一把钥匙,他可能顺手拿走我家里的贵重物品。好在有 OAuth,我能够给他一把 OAuth 钥匙,这把钥匙只能在今天使用,明天就过时。而且,经过这把钥匙进入室内的人,只能看见空调,其余东西对他来讲是隐藏的。最关键的是,若是我中途反悔,能够随时随地吊销这把钥匙,而在房间的空调工会被自动赶出来。
彻底凭记忆默写出来,大概意思没有错。ajax
OAuth 2.0是OAuth协议的下一版本,但不向下兼容OAuth 1.0。OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。npm
本篇文章只讨论 2.0 版本。浏览器
相比概念, OAuth 的具体内容更显复杂。我会先约定几个名词,再作一个小实验,使用 github 的 OAuth 来受权个人小 App。安全
注册 App
注意这里填写的 homepage url 和 authorization callback url。服务器
homepage url: http://localhost:8080 authorization callback url: http://localhost:8080/callback.html
接下来,准备一个小项目
简单起见,安装静态文件server,这里使用 http-serverapp
npm install http-server -g
这项目根目录,启动 server微服务
http-server -p 8080
ok,到这里,应该能明白项目中 index.html 对应的是 homepage url,callback.html 对应的是 authorization callback url。
熟悉的登陆界面,用户选择使用github帐户登陆
页面跳转到github受权页面,注意地址栏的地址信息中包含了client id 和 redirect url
确认受权以后,页面跳转到 redirect url,也就是本地的 callback.html 页面,注意地址栏中的 code。这个code很关键,用于获取最终的 token。
callback.html 页面解析出 code,发送 ajax 请求获取 token
获得的 token。
在本文最开始的地方,提到了 OAuth 的用户能够方便的取消受权 - 吊销令牌(revoke token)。