在浏览网页时,你肯定会遇到允许你使用社交媒体账户登录的网站。此功能一般是使用流行的OAuth 2.0框架构建的。OAuth 2.0是对OAuth 1.0的彻底重写,OAuth 2.0与OAuth 1.0或1.1不向后兼容。
1. OAuth产生背景
为了更好的理解OAuth,我们假设有如下场景:有一个提供云冲印的网站,该网站可以将用户储存在百度网盘的照片冲印出来。用户为了使用该服务,必须让云冲印网站读取自己存储在百度网盘上的照片。
传统方式需要用户将自己的百度网盘用户名和密码告诉云冲印服务提供者,后者就可以读取用户的照片了。然而这种做法有着严重的缺点:
- 云冲印为了后续持续提供服务就会保存用户的密码,这样很不安全;
- 云冲印拥有了获取用户存储在百度网盘所有资源的权力,用户无法限制云冲印获得授权的范围和有效期;
- 用户只有修改密码,才能收回赋予云冲印的权力。但这样做又会使得其他所有获得用户授权的第三方应用程序全部访问失效;
- 只要有一个第三方应用程序被攻破,就会导致用户密码泄露,最终导致此密码保护的所有数据泄露。
为了解决以上问题就引入本文的主角OAuth。
2. 什么是OAuth?
OAuth是一种常用的授权框架,使网站和web应用程序能够请求对另一个应用程序上的用户账户的有限访问。OAuth允许用户在不向请求的应用程序公开其登录凭据的情况下授予此访问权限。这意味着用户可以调整他们想要共享的数据,而不必将其账户的完全控制权交给第三方。
基本的OAu