Oauth2的定义

什么是Oauth2.0

  • 用于REST/APIs的代理授权框架(Delegated authorization framework)
  • 基于令牌Token的授权,在无需暴露用户面的情况下,时引用能获取对用户数据的有限访问权限
  • 解耦认证和授权
  • 事实上的标准安全框架,支持多种用例场景,例如: 服务端WebApp 浏览器单页SPA 无线/原生App 服务器对服务器之间
    这里写图片描述

OAuth2.0的优势

  • 更安全,客户端不接触用户密码,服务端更易集中保护
  • 引用广泛,大型公司基本都使用该框架
  • 资源服务器和授权服务器解耦
  • 集中式授权,简化客户端
  • HTTP/JSON格式支持友好,易于请求和传递token
  • 多种客户端都可以接入,例如网页端 ,app端都可以
  • 客户可以具有不同的信任级别

OAuth2.0不足

  • 协议框架太宽泛,造成各种实现的兼容性和胡操作性差
  • 和OAuth1.0不兼容
  • OAuth2.0不是一个认证协议,OAuth2.0本省并不能告诉你任何用户信息
OAuth2.0属于授权服务器
  • 客户应用: 通常是一个web或者手机,他需要访问用户的受保护资源
  • 资源服务器::是一个web站点或者web service API,用户的受保护数据保存在这个地方
  • 授权服务器: 在客户应用成功认证并获得授权之后,想客户应用颁发访问令牌Access Token
  • 资源拥有者:资源的拥有人,也就是用户。他可以想要分享给第三方应用的一些操作

这里写图片描述

OAuth2.0中的常用术语

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

OAuth2.0核心 授权

  • 授权码(Authrization Code Token): 仅用户授权码授权类型,用于交换获取访问令牌和刷新令牌
  • 刷新令牌(Refresh Token): 用于取授权服务器获取一个新的访问令牌,例如在访问令牌失效后,再使用刷新令牌来换取一个新的访问令牌
  • Bearer Token: 不管拿到Token都可以访问资源,像现钞
  • 访问令牌(AccessToken): 用于代表一个用户或服务直接取访问受保护的资源(重要)
  • Proof of Possession(PoP)Token: 可以校验client是否对Token有明确的拥有权

OAuth2.0正解

  • OAuth2.0并没有支持HTTP以外的协议
  • OAuth2.0并不是一个认证协议
  • OAuth2.0并没有定义授权处理机制
  • OAuth2.0并没有定义token格式
  • OAuth2.0并没有定义加密算法
  • OAuth2.0并不是单个协议
  • OAuth2.0仅仅时一个授权框架,仅用户授权代理

OAuth2.0的一些问题常见总结

  • 如果拿到token之后,岂不是对于任何服务的访问就没有限制了,利用该token攻击别人的数据怎么处理呢
资源服务器会对token进行权限校验(也可在微服务网关上集中做),简单讲,资源服务器可以按需增加细粒度权限控制~这个token对应的用户是什么角色,有什么权限,能做什么操作,资源服务器有更多决策权,而且不同资源服务器可有不用策略。当然token是有被盗用风险,有一些安全措施防止被盗,发现被盗可以吊销,另外可根据场景缩短token有效期。
  • Access Token和 Bearer Token有什么区别呢?
Bearer Token是Access Token的一种格式,这种格式一般是随机字符串无特殊意义,也就是不能从Bearer Token的字面推断出这个Token是谁颁发给谁的,像现钞一样谁拿到了都可以去消费使用;还有一种叫Proof of Possession(PoP) Token,这种Token里头包含所有者信息,可以校验拥有者,别人不能随便用。

猜你喜欢

转载自blog.csdn.net/m0_37779570/article/details/82020898