OAuth2授权流程
作者:互联网
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人。
文章不定期同步公众号,还有各种一线大厂面试原题、我的学习系列笔记。
周末也要努力鸭!
基础概念
用户访问某个网站的资源,而不必记住该用户在这个网站的账号密码。假如我正在访问“思否”,看到一篇文章不错,想要评论,但是评论就要先登录,我比较懒又不想注册“思否”,于是“思否”这个网站就提供了微信登录,即向微信请求读取我的个人信息去登录“思否”,在这个过程中,
Authorization server:授权服务器,比如微信授权服务器
Resource server:资源服务器,和授权服务器可以是同一个服务器,也可以不是同一个
HTTP service:服务提供商,如微信
client:客户端,如网站“思否”
Resource Owner:资源所有者,如用户
OAuth2认证流程
(1)客户端向授权服务器请求访问资源所有者的资源->
(2)资源所有者"同意"授权,授权服务器则返回code(授权码)给客户端->
(3)客户端拿code去授权服务器请求token(一般在客户端后台实现)->
(4)授权服务器验证code的真伪,若真则返回token->
(5)客户端拿到token,就可以去资源服务器请求访问资源->
(6)资源服务器验证token正确则返回资源
OAuth2定义了四种类型的授权模式
- 授权码模式
- 密码模式
- 简化模式
- 客户端模式
授权码模式
流程最严密的验证模式,其步骤与上面所述的“OAuth2认证流程”基本一致:
(1)第三方客户端向授权服务器请求访问资源所有者的资源:假如我正在访问“思否”,看到一篇文章不错,想要评论,但是评论就要先登录,我比较懒又不想注册“思否”,于是“思否”这个网站就提供了微信登录,点击思否的“微信登录”后,会跳转到微信提供的页面向用户确认是否授权“思否”读取我的信息(微信提供的页面对应微信后台的授权服务器),如图
(2)资源所有者"同意"授权,授权服务器则返回code(授权码)给第三方客户端:我扫码登录微信,代表同意授权给“思否”读取我的微信个人信息去登录,此时微信授权服务器会重定向到一个事先指定的“重定向url”,并返回一个code(授权码),假如这个url是“思否”网站的网址,则会重定向回到“思否”,如图
(3)第三方客户端拿code去授权服务器请求token(一般在第三方客户端后台实现):“思否”拿到code(授权码)之后,带上“重定向的url”,继续去微信授权服务器请求token
(4)授权服务器验证code的真伪,若真则返回token:微信授权服务器拿到code(授权码)、“重定向的url”之后,验证code,并验证“重定向的url”是否就是事先指定的“重定向url”,若是则返回token给“重定向url”,即“思否”
(5)第三方客户端拿到token,就可以去资源服务器请求访问资源:“思否”拿到token后,就可以真正向微信请求访问我的个人信息
(6)资源服务器验证token正确则返回资源:微信服务器收到token后,验证成功后返回我的个人信息给“思否”
简化模式
相比授权码模式,简化模式省去了code(授权码),它直接向授权服务器申请令牌,所有动作都在浏览器页面完成
密码模式
用户直接把账号密码给第三方客户端,第三方客户端再拿账号密码去向服务方索要授权,这样第三方客户端就可以访问用户信息了,但是同时第三方客户端要遵守不存储密码的规则,这种一般用于用户对第三方客户端高度信赖的基础上
客户端模式
服务方事先提供给第三方客户端一个client_id和client_secret,第三方客户端每次请求服务方访问用户的信息时,只需要提供事先拿到的client_id和client_secret给服务方,服务方拿到client_id和client_secret后验证无误就生成token给第三方客户端,此时第三方客户端就可以访问用户数据了
OK,如果文章哪里有错误或不足,欢迎各位留言。
创作不易,各位的「三连」是二少创作的最大动力!我们下期见!
标签:OAuth2,微信,流程,token,思否,服务器,授权,客户端 来源: https://www.cnblogs.com/mofes/p/14965417.html