- 客户端/第三方应用: 获取用户信息,如果我们使用QQ账号来登录CSDN网站,这时候CSDN相对于QQ来说就是第三方应用,或者成为是QQ的客户端 。
- 服务提供商: 对外提供请求的服务器,比如上面说的QQ 。
- Resource Owner:资源所有(拥有)者,首先我们要明确“资源”的含义,“资源”是指我们请求的各种URL接口及各种数据,这里的资源所有者,也就是登录用户 。
- Authorization Server:认证服务器,即服务提供商(比如QQ)专门用来处理认证的服务器 。
- Resource Server:资源服务器,即服务提供商存放用户资源的服务器 。它与认证服务器,可以是同一台服务器,也可以是不同的服务器 。
- Access token: 访问令牌,供客户端用来请求Resource Server(API)的资源,Access token通常是short-lived短暂的 。
- 令牌是短期的,到期后会自动失效,用户自己无法修改;密码一般是长期有效的,用户不修改,就不会发生变化 。
- 令牌可以被资源所有者撤销,立即失效;密码一般不允许被他人撤销 。
- 令牌有一定的授权范围(scope),密码一般是完整权限 。
三. OAuth2.0授权流程(重点)了解完OAuth2.0中的各种基本概念之后,我们需要弄清楚OAuth2.0的授权流程,这样后面才能根据这个授权流程进行开发 。
1. 授权流程概述
文章插图
OAuth 2.0的运行流程如下图,摘自RFC 6749 。
文章插图
我们这里以QQ账号登录CSDN网站为例,给大家说一下OAuth2.0的授权执行流程:
(A). 某个用户(资源拥有者)打开CSDN(客户端)网站以后,CSDN(客户端)要求用户(资源拥有者)给予授权;2. 授权流程详解
(B). 如果用户(资源拥有者)同意,就给予CSDN(客户端)授权;
(C). CSDN(客户端)使用上一步获得的授权,向QQ的认证授权服务器申请访问令牌Access Token;
(D). QQ的认证授权服务器对CSDN(客户端)进行认证,确认无误后,同意发放访问令牌Access Token;
(E). CSDN(客户端)使用访问令牌,向QQ的资源服务器申请获取某些受保护的资源;
(F). QQ的资源服务器确认访问令牌无误后,同意向CSDN(客户端)开放受保护的资源 。
文章插图
第一步:在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(授权码) 。
文章插图
第三步:跳回到CSDN页面,登录成功这一步背后的过程其实是最繁琐的,但对于用户来说是完全感知不到的 。
授权QQ服务器在判断登录成功后,使页面重定向到之前CSDN发来的callback地址并附上code授权码,接着会跳转到QQ的认证服务器发起一个新的请求,获取到AccessToken令牌 。获取token成功后,CSDN服务器会用拿到的token换取用户信息,最后将用户信息储存起来,并返回给浏览器其首页的视图,到此OAuth2.0授权结束 。
推荐阅读
- 一文带你读懂Python计算机视觉中的OpenCV手势识别方法
- 一文了解MQTT协议
- 穿衣搭配|水乳一定要“成套用”吗?很多人都没搞懂,难怪用大牌也是浪费
- 一文搞懂HTTP,TCP,UDP,Socket,WebSocket
- 一文让你彻底搞清楚,Linux零拷贝技术的那些事儿
- 一文读懂所有HTTP状态码含义
- HDMI和DP区别在哪里?电脑连接线怎么选,一文看懂连接线的历史
- 一文带你理解URI 和 URL 有什么区别?
- 十分钟搞懂手机号码一键登录
- 一图搞懂扫码登录的技术原理