08.微服务安全OAuth2
为什么需要OAuth2
- 开放系统间的授权
- 微服务安全
- 企业内部应用认证授权(IAM/SSO)
常见的使用场景
- 微信登录processon
- 支付宝登录淘宝
- 美团付款使用支付宝
OAuth2的历史
- 大致开始于2007年
- 2010年RFC5849定义了OAuth1.0
- 2010年IETF开始OAuth2.0制作工作
- 2012年中第一作者和编辑退出,并将其名字从所有规范中删除
- 2012年10月RFC6749 ,RFC6750(就是一些规范)出炉了
OAuth2的定义
OAuth协议为用户资源的授权提供了一个安全的,开放而又简易的标准。与以往的授权方式不同的是OAuth的授权不会使第三方触及到用户的账号信息(如用户名和密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAuth是安全的。
OAuth2图示
OAuth2里的角色
- 资源拥有者:一般指的是用户
- 资源服务器:美团外卖调用支付宝付钱,钱是资源,支付宝是资源服务器
- 授权服务器:美团外卖调用支付宝付钱,授权服务器在支付宝那一侧,一般负责在客户应用获得授权后给客户应用颁发Access Token
- 客户应用(第三方应用):美团外卖调用支付宝付钱,美团外卖就是客户应用,一般负责拿着Access Token获取资源
- 客户凭证:客户的clientId和密码用于认证客户
- 令牌:授权服务器在接收到客户请求后,颁发给客户应用的令牌
- 作用域:客户请求访问令牌时,由资源拥有者额外指定的细分权限
OAuth2的授权模式
注意,不管哪一种授权方式,第三方应用申请令牌之前,都必须先到系统备案,说明自己的身份,然后会拿到两个身份识别码:客户端 ID(client ID)和客户端**(client secret)。这是为了防止令牌被滥用,没有备案过的第三方应用,是不会拿到令牌的。
以下介绍均基于qq登录百度网盘为案例
1.授权码模式介绍
最常用也是最复杂的模式
- 用户点击前端超链接后跳转到登录页面
- 输入账号密码登录(请求授权码)
- 授权服务器向客户应用颁发授权码
- 客户应用通过授权码向授权服务器获取Access Token
- 授权服务器校验授权码如果成功向客户应用颁发Access Token
- 客户应用拿着Access Token向资源服务器请求资源