OAuth2 基本概念
OAuth2 基本概念
OAuth2 概念
- OAuth 2.0是一种授权框架,支持第三方应用程序获取对HTTP服务的有限访问。
关于更详细通俗的解释,可以参考阮一峰的文章
- OAuth2标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像、照片、视频等),而在这个过程中无须将用户名和密码提供给第三方应用。实现这一功能是通过提供一个令牌(token),而不是用户名和密码来访问他们存放在特定服务提供者的数据。
OAuth2的角色
通过上面的概念介绍,可以知道在OAuth2中,有几个这样的参与者:用户、资源(照片)、第三方应用、服务提供者。可以称他们为OAuth2中的角色
在OAuth 2 标准中定义了以下几种角色:
- 资源所有者(Resource Owner):即代表授权客户端访问本身资源信息的用户,客户端访问用户帐户的权限仅限于用户授权的“范围”。
- 客户端(Client):即代表意图访问受限资源的第三方应用。在访问实现之前,它必须先经过用户者授权,并且获得的授权凭证将进一步由授权服务器进行验证。
- 授权服务器(Authorization Server):授权服务器用来验证用户提供的信息是否正确,并返回一个令牌给第三方应用。
- 资源服务器(Resource Server):资源服务器是提供给用户资源的服务器,例如头像、照片、视频等。
(授权服务器和资源服务可以是同一个服务器)
OAuth2的授权流程
OAuth2还规定了4中授权模式
- 授权码模式
- 用户名密码模式
- 隐式授权模式
- 客户端模式
接下来简单介绍下这几种模式下的流程
在介绍流程之前,先简单感受下,一些平台的第三方登录,以网易云第三方登录举例
- 选择QQ登录后
2.跳到如下的网址:https://graph.qq.com/oauth2.0/show?which=Login&display=pc&client_id=100495085&response_type=code&redirect_uri=https://music.163.com/back/qq&forcelogin=true&state=mJrUGyxzwb&checkToken=xxx,,点击确定,就会跳到网易云页面
(再例如,访问微博点击第三方QQ登录,跳到的网址:
上面的两个例子,可以看到,response_type=code(授权码模式下标识),它们都是授权码模式的第三方登录
密码模式下的流程
很多项目还是以用户名密码来进行登录,所以先介绍一下这个流程,其他模式其实都差不多
可以看到密码模式下的流程是:用户在浏览器(客户端)提交用户名和密码得到token,客户端通过token来访问资源
- 客户端要求用户登录,用户输入用户名和密码,客户端发送client_id client_secret 用户名密码 grant_type发送给授权服务器
- 授权服务器校验参数:client_id client_secret 用户名密码 grant_type,通过后生成一个token给客户端
- 客户端把这个token放到请求头中访资源服务器
- 资源服务器接收请求,并且校验token(可以通过远程调用授权服务器端点来校验,也可以自己校验),校验通过后,返回资源
授权模式下的流程
客户端通过client_id等参数获取授权码,再通过授权码换取token,再使用token访问资源
流程:
- 客户端将client_id grant_type redirect_uri访问授权服务器的端点
- 授权服务器返回登录页面,用户输完用户名密码,授权服务器校验通过后,发送一个授权码给上面的说的回调地址redirect_uri
- 客户端通过授权码 client_id client_secret 访问授权服务器的颁发token的端点
- 客户端收到token后,在请求头中添加token 访问资源
- 资源服务器接收请求,并且校验token(可以通过远程调用授权服务器端点来校验,也可以自己校验),校验通过后,返回资源
这个里面说到了一些什么端点,其实就是oauth2 为我们开放了一些访问的端点,后面的实现代码中会提到这些端点
客户端模式下的流程
客户端模式下,一般用于对服务器来讲,这个客户端是公司内部受信任的客户端
客户单使用自己的标识换取token,然后使用该token访问资源
流程
- 发送带有client_id client_secret grant_type请求给授权服务器的token端点
- 授权服务器校验通过后返回token给客户端
- 客户端收到token后,在请求头中添加token 访问资源
- 资源服务器接收请求,并且校验token(可以通过远程调用授权服务器端点来校验,也可以自己校验),校验通过后,返回资源
隐式授权模式下的流程
客户端让用户登录授权服务器换取token,通过token访问资源
- 客户端带着 client_id grant_type(授权模式标识) redirect_uri 访问授权端点
- 授权服务器返回登录页面,用户输入用户名密码,授权服务器校验用户名和密码,返回一个token给客户端
- 客户端收到token后,在请求头中添加token 访问资源
- 资源服务器接收请求,并且校验token(可以通过远程调用授权服务器端点来校验,也可以自己校验),校验通过后,返回资源
本文作者:hu_volsnow
本文链接:https://www.cnblogs.com/volsnow/p/15745001.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步