其他分享
首页 > 其他分享> > OAuth2授权流程

OAuth2授权流程

作者:互联网

点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人。

文章不定期同步公众号,还有各种一线大厂面试原题、我的学习系列笔记。

周末也要努力鸭!

image

基础概念

用户访问某个网站的资源,而不必记住该用户在这个网站的账号密码。假如我正在访问“思否”,看到一篇文章不错,想要评论,但是评论就要先登录,我比较懒又不想注册“思否”,于是“思否”这个网站就提供了微信登录,即向微信请求读取我的个人信息去登录“思否”,在这个过程中,

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)第三方客户端向授权服务器请求访问资源所有者的资源:假如我正在访问“思否”,看到一篇文章不错,想要评论,但是评论就要先登录,我比较懒又不想注册“思否”,于是“思否”这个网站就提供了微信登录,点击思否的“微信登录”后,会跳转到微信提供的页面向用户确认是否授权“思否”读取我的信息(微信提供的页面对应微信后台的授权服务器),如图

image

(2)资源所有者"同意"授权,授权服务器则返回code(授权码)给第三方客户端:我扫码登录微信,代表同意授权给“思否”读取我的微信个人信息去登录,此时微信授权服务器会重定向到一个事先指定的“重定向url”,并返回一个code(授权码),假如这个url是“思否”网站的网址,则会重定向回到“思否”,如图

image

(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