赞
踩
目录
6.3 密码模式(Resource Owner Credentials)
OAuth使用代理协议的方式解决了密码共享反模式问题。
给应用赋予有限的访问权限,让应用有权限去访问用户数据。
举个例子,你把你的保时捷911停到一家酒店,那么你会给酒店服务员保时捷钥匙帮你停车,你给服务员的钥匙,是有限制的,不能行使太远的距离,也不能打开车里的柜子或者是后备箱。
给服务员的钥匙是一个仆从钥匙,相当于令牌Token。
OAuth2的本质就是如何获取token,如何使用token。
举个例子:
场景:我要玩游戏,游戏可以获取到我的微信好友是否也在玩这个游戏。那么我需要同意授权给游戏获取到我的微信好友。
角色:
- 我本人 - 资源拥有者;
- 游戏 - 客户应用;
- 微信 - 资源服务器;
- 授权服务器 - 管理和颁发Access Token
流程:
- 游戏向授权服务器请求要Access Token,就是要拿到相关的权限去拿到微信好友
- 授权服务器询问我是否同意授权给游戏拿到微信好友信息
- 我选择同意赋予权限
- 授权服务器得知我同意后,生成Access Token并颁发给游戏
- 游戏拿到Access Token后,带上Access Token去请求微信要我的微信好友信息
- 微信校验Access Token,校验通过之后,则把我的微信好友信息返回给游戏。
从上面的流程来看,最关键的一步就是授权和Access Token,那再怎么样授权才能拿到Access Token呢?从这点切入就会了解到OAuth2的四种授权方式。
四种模式中最复杂的一种,也是最安全的,也是目前应用最多的模式。
特点
此流程图是自己理解过后画的,如要官方流程图,请参考
RFC 6749 - The OAuth 2.0 Authorization Frameworkhttps://datatracker.ietf.org/doc/html/rfc6749#section-4.1
重定向的url是客户应用自己定义的,比如要登录https:web.com ,中途需要认证授权,那么重定向url就是https:web.com。是认证成功之后重定向的url。
比授权码模式简单一点,没有中间的授权码交换,适用于单页应用,没有后台的应用场景。
特点
起码画的流程图我没有照着官网画,我省略了一个Web托管资源服务器,我觉得如果加上这个对于刚接触的人来说有点难理解。有兴趣的可在官网上查看
特点
这种也比较简单,甚至都没有资源拥有者的参与,直接由客户应用将客户的认证信息发送到授权服务器,授权服务器校验通过之后返回Access Token给客户应用。这种适用于机器对机器(后端)的场景。
特点
上文的几种模式中都提到了一个刷新令牌,也就是Refresh Token,那么Refresh Token是什么时候可以用到呢,以及目的是什么呢?
目的:简化获取Access Token流程,不需要每次都走完成的获取Access Token的流程,快速的获取新的Token。
根据角色之间的交互可以划分渠道。
我们可以把应用大致分为两类,一个是公开应用,一个是私密应用。
- 如果是机器需要访问资源,可以选择客户端模式;
- 如果是用户需要访问资源
- 如果客户类型是Web服务器端应用,可以选择授权码模式;
- 如果是原生App
- 第一方原生APP(可以理解为同一个公司旗下)
- 选择用户密码模式
- 第三方原生App
- 选择客户端模式
- 如果是单页应用SPA
- 第一方单页应用SPA
- 选择用户密码模式
- 第三方单页应用SPA
- 选择简化模式
典型的授权服务的组成,是有四个主要端点组成,也就是四大功能。
阮一峰的网络日志 - 理解OAuth 2.0https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html The OAuth 2.0 Authorization Frameworkhttps://datatracker.ietf.org/doc/html/rfc6749#section-1.3.1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。