- Oauth2.0协议一般是用在互联网API开放平台上的,比如第三方联合登录等会用到Oauth2.0联合协议
- 为什么会有Oauth2.0?
- 因为在互联网开放平台中,接口互相调用,保证安全性的问题
- 什么是开放平台?
- 暴露公网IP提供API接口
- 常见的开放平台:支付宝,微信,蚂蚁金服,百度等
- 开放平台适合于大型互联网公司
- 不同的开放平台对接的Oauth2.0的协议流程都是相同的,无非是接口的地址不同
OAuth2是什么
- OAuth,开放授权,是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务器提供者上的信息,而不需要将用户和密码提供给第三方移动应用或分享他们数据的所有的内容。OAuth2.0是OAuth协议的延续版本,但是不向后兼容,即完全废除了OAuth1.0
应用场景
- 第三方应用授权登录:在APP或者网页接入一些第三方应用的时候,时长会需要用户登录另一个合作平台,比如QQ,微博 ,微信的授权登录
- 原生app授权:app登录请求后台,为了安全认证,所有请求都带token信息,如果登录验证,请求后台的数据
- 前后端分离页面应用:前后端分离框架,前端请求后台的数据,需要进行OAuth2安全认证。
名词定义
- Third-party application:第三方应用程序,本文中又称为“客户端”,比如打开知乎,使用第三方登录,选择qq登录,这个时候知乎就是客户端
- Http Service:HTTP服务的提供商,本文中简称“服务提供商”,即上例的QQ
- Resource Owner:资源所有者,本文中又称“用户”,即当前登录的用户
- User Agent:用户代理,本文中就是指浏览器
- Authorization Server:认证服务器,即服务提供商专门用来处理认证的服务器
- Resource Server:资源服务器,即服务商提供存放用户生成资源的服务器。他与认证服务器,可以是同一台服务器,也可以是不同的服务器。
运行流程(结合上面的名词定义来看)
(A)用户打开客户端之后,客户端要求用户授予权限(可以理解为打开知乎,如果是QQ登录,需要QQ的权限)
(B)用户同意给客户端权限
(C)客户端使用上一步获得的权限,向认证服务器申请令牌(服务提供商就是QQ)
(D)认证服务器对客户端进行认证之后,确认无误,同意发放令牌
(E)客户端使用令牌,向资源服务器申请获取资源
(F)资源服务器确认令牌没有问题。同意向客户端开放资源
四种授权模式
- 授权码模式
- 简化模式
- 密码模式
- 客户端模式
授权码模式
- 授权码模式是功能最完善,流程最严密的授权模式
(1)用户访问客户端,后者将前者导向认证服务器,假设用户给予授权,认证服务器将用户导向客户端事先指定的“重定向URI”,同时附上一个授权码
(2)客户端收到授权码,附上早先的重定向URI。向认证服务器申请令牌:GET /oauth/token?response_type=code&client_id=test&redirect_uri=重定向页面链接。请求返回code的授权码,一般有效的时间是10分钟
(3)认证服务器核对了授权码和重定向URI,确认无误之后,向客户端发送令牌和更新令牌,POST /oauth/token?response_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=重定向页面链接。请求成功返回access token和refresh token
简化模式
- 适用于公开的浏览器单页应用
- Access Token直接从授权服务器返回(只有前端渠道)
- 不支持refresh Token
- 假定资源所有者和公开客户应用在同一个设备上
- 最容易受到安全攻击
用户名密码Resource Owner Credentials
- 使用用户名密码登录的应用,例如桌面APP
- 使用用户名,密码作为授权方式从授权服务器上获取access token
- 一般不支持refresh token
- 假定资源拥有者和公开客户应用在同一个设备上
客户端凭着
- 适用于服务器通信场景。机密客户代表他自己或者一个用户
- 只有后端渠道,使用客户凭证获取一个access token
- 因为客户端凭证可以使用对称或者非对称加密,该方式支持共享密码或者证书