正文
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
引例
举个例子,你想登录豆瓣去看看电影评论,但你从来没注册过豆瓣账号,又不想新注册一个再使用豆瓣,怎么办呢? 不用担心,豆瓣已经为你这种懒人做了准备,用你的QQ号可以授权给豆瓣进行登录。
在豆瓣登录页面点击QQ登录,在QQ登录页面输入账号密码登录,跳转回调,完成登录。过程如图:
简单来说,上述例子中的豆瓣就是客户端,QQ就是认证服务器,OAuth2.0就是客户端和认证服务器之间由于相互不信任而产生的一个授权协议。
过程讲解:
- 第一步:在豆瓣官网点击用QQ登录
当你点击用QQ登录的小图标时,实际上是向豆瓣的服务器发起了一个 http://www.douban.com/leadToAuthorize
的请求,
豆瓣服务器会响应一个重定向地址,指向QQ授权登录
浏览器接到重定向地址 http://www.qq.com/authorize?callback=www.douban.com/callback
,再次访问。
并注意到这次访问带了一个参数是callback,以便QQ那边授权成功返回后再次让浏览器发起这个callback请求。
不然QQ怎么知道你让我授权后要返回那个页面啊,每天让我授权的像豆瓣这样的网站这么多。
- 第二步:跳转到QQ登录页面输入用户名密码,然后点授权并登录
上一步中浏览器接到重定向地址并访问 http://www.qq.com/authorize?callback=www.douban.com/callback
QQ的服务器接受到了豆瓣访问的authorize,在此例中所给出的回应是跳转到QQ的登录页面,用户输入账号密码点击授权并登录按钮后, 一定还会访问QQ服务器中校验用户名密码的方法,若校验成功,该方法会响应浏览器一个重定向地址,并附上一个code(授权码)。 由于豆瓣只关心像QQ发起authorize请求后会返回一个code,并不关心QQ是如何校验用户的, 并且这个过程每个授权服务器可能会做些个性化的处理,只要最终的结果是返回给浏览器一个重定向并附上code即可。
- 第三步:跳回到豆瓣页面,成功登录
这一步背后的过程其实是最繁琐的,但对于用户来说是完全感知不到的。 用户在QQ登录页面点击授权登陆后,就直接跳转到豆瓣首页了,但其实经历了很多隐藏的过程。
首先接上一步,QQ服务器在判断登录成功后,使页面重定向到之前豆瓣发来的callback并附上code授权码,
即 callback=www.douban.com/callback
页面接到重定向,发起 http://www.douban.com/callback
请求
豆瓣服务器收到请求后,做了两件再次与QQ沟通的事,即模拟浏览器发起了两次请求。 一个是用拿到的code去换token,另一个就是用拿到的token换取用户信息。 最后将用户信息储存起来,返回给浏览器其首页的视图。到此OAuth2.0授权结束。
详解
参考资料
一张图搞定OAuth2.0 https://www.cnblogs.com/flashsun/p/7424071.html
阮一峰的网络日志 理解OAuth 2.0 http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
OAuth 2.0 的一个简单解释 https://www.ruanyifeng.com/blog/2019/04/oauth_design.html