一文搞懂OAuth2.0授权协议是怎么回事( 二 )


  • 客户端/第三方应用: 获取用户信息,如果我们使用QQ账号来登录CSDN网站,这时候CSDN相对于QQ来说就是第三方应用,或者成为是QQ的客户端 。
  • 服务提供商: 对外提供请求的服务器,比如上面说的QQ 。
  • Resource Owner:资源所有(拥有)者,首先我们要明确“资源”的含义,“资源”是指我们请求的各种URL接口及各种数据,这里的资源所有者,也就是登录用户 。
  • Authorization Server:认证服务器,即服务提供商(比如QQ)专门用来处理认证的服务器 。
  • Resource Server:资源服务器,即服务提供商存放用户资源的服务器 。它与认证服务器,可以是同一台服务器,也可以是不同的服务器 。
  • Access token: 访问令牌,供客户端用来请求Resource Server(API)的资源,Access token通常是short-lived短暂的 。
2. 令牌与密码在OAuth2.0中,提到了一个令牌的概念,那么令牌是什么?与我们平常所用的密码又有什么区别?其实OAuth中的令牌(token)与密码(password)作用是一样的,都可以控制用户是否可以进入系统,但是有几点不同 。
  • 令牌是短期的,到期后会自动失效,用户自己无法修改;密码一般是长期有效的,用户不修改,就不会发生变化 。
  • 令牌可以被资源所有者撤销,立即失效;密码一般不允许被他人撤销 。
  • 令牌有一定的授权范围(scope),密码一般是完整权限 。
注意:令牌的出现,既可以让第三方应用获得权限,同时又可以随时可控,不会危及系统安全 。但是只要知道了令牌,就能进入系统,系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的 。这也是为什么令牌的有效期,一般都设置得很短的原因 。
三. OAuth2.0授权流程(重点)了解完OAuth2.0中的各种基本概念之后,我们需要弄清楚OAuth2.0的授权流程,这样后面才能根据这个授权流程进行开发 。
1. 授权流程概述
一文搞懂OAuth2.0授权协议是怎么回事

文章插图
 
OAuth 2.0的运行流程如下图,摘自RFC 6749 。
一文搞懂OAuth2.0授权协议是怎么回事

文章插图
 
我们这里以QQ账号登录CSDN网站为例,给大家说一下OAuth2.0的授权执行流程:
(A). 某个用户(资源拥有者)打开CSDN(客户端)网站以后,CSDN(客户端)要求用户(资源拥有者)给予授权;
(B). 如果用户(资源拥有者)同意,就给予CSDN(客户端)授权;
(C). CSDN(客户端)使用上一步获得的授权,向QQ的认证授权服务器申请访问令牌Access Token;
(D). QQ的认证授权服务器对CSDN(客户端)进行认证,确认无误后,同意发放访问令牌Access Token;
(E). CSDN(客户端)使用访问令牌,向QQ的资源服务器申请获取某些受保护的资源;
(F). QQ的资源服务器确认访问令牌无误后,同意向CSDN(客户端)开放受保护的资源 。
2. 授权流程详解
一文搞懂OAuth2.0授权协议是怎么回事

文章插图
 
第一步:在CSDN官网点击选择QQ登录当我们点击选择QQ登录的图标时,实际上是向CSDN服务器发起了一个
https://graph.qq.com/oauth2.0/show?which=Login&display=pc...&response_type=code&redirect_uri=https....passport.csdn.netogin%3FpcAuth...Type=qq的请求,CSDN服务器会响应一个302重定向地址,指向QQ授权登录 。这次访问会携带一个pcAuthCallback,以便QQ那边授权成功后,再次让浏览器发起对这个callback的请求,这样QQ就知道授权后要返回到哪个页面 。
第二步:跳转到QQ登录页面输入用户名密码,然后点授权并登录接着浏览器跳转到重定向地址并访问 http://www.qq.com/authorize?callback=https://yiyige.blog.csdn.net/,QQ的服务器接受到了CSDN访问的authorize,并跳转到QQ的登录页面 。在用户输入账号密码点击授权并点击登录按钮后,QQ的认证服务器会对用户信息进行认证,若校验成功,该方法会响应浏览器一个重定向地址,并附上一个code(授权码) 。
一文搞懂OAuth2.0授权协议是怎么回事

文章插图
 
第三步:跳回到CSDN页面,登录成功这一步背后的过程其实是最繁琐的,但对于用户来说是完全感知不到的 。
授权QQ服务器在判断登录成功后,使页面重定向到之前CSDN发来的callback地址并附上code授权码,接着会跳转到QQ的认证服务器发起一个新的请求,获取到AccessToken令牌 。获取token成功后,CSDN服务器会用拿到的token换取用户信息,最后将用户信息储存起来,并返回给浏览器其首页的视图,到此OAuth2.0授权结束 。


推荐阅读