您的位置:首页 > 运维架构 > 网站架构

微服务架构视频笔记 - OAuth2定义和原理

2020-07-18 04:43 666 查看

OAuth2定义和原理

OAuth2最简向导

首先有用户数据,然后有个资源服务器,负责管理用户数据,有时候会有客户应用需要访问用户的数据,这时候,我们一般会给资源服务器按个门来暴露用户数据,被称为API,有了这个API之后,客户应用就可以通过API来访问用户数据,这个时候,如果客户应用通过API提出“给我用户的数据”的请求,我们的资源服务器收到这个请求之后,就可以把相应的用户数据返回给客户应用,这样的话客户应用就拿到了用户数据。

这时,如果来了个恶意客户应用会发生什么,当恶意客户应用通过API发送“给我用户的数据”的请求,若是资源服务器没有安全限制的话,就会提供用户数据给恶意客户应用,会造成恶意客户应用也可以访问用户数据的情况。

业界针对这种场景的实践是提前给用户应用颁发一个Access Token,他表示客户应用被授权可以访问用户数据,而拿到Access Token之后的客户应用,在访问用户数据时候,会给出Access Token,而资源服务器拿到这个Access Token之后,会做出一个校验,来看这个令牌是不是合法的,有没有权限去访问用户数据,如果有权限,那就会把用户数据返回给他,这就完成了一次正常的、安全的数据访问,这个机制可以工作的前提,就是必须提前给客户应用颁发Access Token,也就是说我们需要一个颁发Access Token的角色,这就需要引入一个新的角色了,那就是授权服务器,由他来管理和颁发Access Token。

授权服务器主要负责生成Access Token,并且把Access Token颁发给客户应用,
客户应用带上Access Token通过API调用的方式访问用户数据,资源服务器会取出这个Access Token并且校验Access Token是否具有访问用户数据的权限,如果校验通过,他就会把用户数据提供给客户应用。

在上面的这个流程中第一步是授权服务器生成Access Token,在真实流程中,颁发Token之前需要征询用户同意,也就是说在客户应用申请“给我Access Token”时,授权服务器就会跳转页面到客户端,去询问客户“你是否同意将权限授予客户应用”,如果这个客户同意,这时授权服务器才会正式的生成Access Token,并把这个Access Token办法给客户应用。在这样一个过程之中,OAuth 2.0标准化了Access Token的请求和响应部分,OAuth 2.0的细节在RFC 6749(OAuth 2.0授权框架)中描述。

OAuth 2.0的定义

  • 用于REST/APIs的代理授权框架(delegated authorization framework)
  • 基于令牌Token的授权,在无需暴露用户密码的情况下,使应用能获取对用户数据的有限访问权限
  • 解耦认证和授权
  • 事实上的标准安全框架,支持多种应用场景 是服务器端WebApp
  • 浏览器单页SPA
  • 无线/原生App
  • 服务器对服务器之间

对于令牌Token,可以类比为仆从钥匙(Valet Key)
有一些高档汽车是具有常规钥匙和仆从钥匙的,而仆从钥匙通常是只具有一些有限的权限,比方说只能行驶有限的公里数,不能打开汽车内的柜子、后备箱。
令牌与仆从钥匙就很像,令牌是给用户授权有限的访问权限,让应用能够代表用户去访问用户的数据,是OAuth的核心部分。

OAuth 2.0历史

在OAuth 2.0之前存在了一个OAuth 1.0,而现在以及不再常用,2010年开始制定OAuth 2.0,诸如Google,Microsoft,Facebook等大厂干预其中,由于OAuth 2.0这个协议干系人以及场景非常多,所以就会出现利益的冲突,但是在2012年10月的时候,OAuth 2.0的规范最终还是出炉了。

OAuth 2.0优势

  1. OAuth 2.0比OAuth 1.0易于实现
  2. 更安全,客户端不接触用户密码,服务器端更易集中保护
  3. 广泛传播并被持续采用
  4. 短寿命和封装的token
  5. 资源管理器和服务授权服务器的解耦
  6. 集中式授权,简化客户端
  7. HTTP/JSON友好,易于请求和传递token
  8. 考虑多种客户端架构场景
  9. 客户可以具有不同的信任级别

OAuth 2.0不足

  • 协议框架太宽泛,造成各种实现的兼容性和互操作性差
  • 和OAuth 1.0不兼容
  • OAuth 2.0不是一个认证协议,而是一个授权协议,OAuth 2.0本身并不能告诉你任何用户信息

OAuth 2.0主要角色

  • 客户应用(Client Application):是一个Web或者无线应用,他需要访问用户的受保护资源
  • 资源服务器(Resource Server):是一个web站点或者web service API,用户的受保护数据保存于此
  • 授权服务器(Authorized Server):在客户应用成功认证并获得授权之后,向客户应用颁发访问令牌Access Token
  • 资源拥有者(Resource Owner):资源的拥有人,想要分享某些资源给第三方应用

OAuth术语

  • 用户凭证(Client Credentials):用户的ClientId和密码用于认证客户
  • 令牌(Tokens):授权服务器在接收到客户请求后,颁发的访问令牌
  • 资源拥有者(Scopes):客户请求访问令牌时,由资源拥有者额外指定的细分权限(permission)

OAuth令牌类型

  • 访问令牌(Access Token):用于代表一个用户或服务直接去访问受保护的资源,最为重要。
  • 刷新令牌(Refresh Token):用于去授权服务器获取一个新的访问令牌。
  • 授权码(Authorization Code Token):仅用于授权码授权类型,用于交换获取访问令牌和刷新令牌。
  • Bearer Token:访问令牌的一种格式,不管谁拿到Token都可以访问资源,像现钞。
  • Proof of Possession(PoP)Token:可以校验client是否对Token有明确的拥有权。

OAuth 2.0误解

  • OAuth并没有支持HTTP以外的协议
  • OAuth并不是一个认证协议
  • OAuth并没有定义授权处理机制
  • OAuth并没有定义token格式
  • OAuth 2.0并没有定义加密方法
  • OAuth 2.0并不是单个协议
  • OAuth 2.0仅是授权框架,仅用于授权代理

小结

  • OAuth本质:如何获取token,如何使用token
  • OAuth是一种在系统之间的代理授权(delegation authorization)协议
  • OAuth提供一个宽泛的协议框架,具体安全场景需要定制
  • OAuth使用代理协议的方式解决密码共享反模式问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐