计算机网络

OAuth

Posted by Gavin on July 4, 2020

何须浅碧轻红色

自是花中第一流

OAuth

OAuth 1.0

OAuth (Open Authorization) 是一个开放标准,允许用户授权第三方应用访问其私有资源,但无需将用户名和密码提供给第三方应用。都不用设想,如果一个第三方应用的服务,需要访问你其他地方的资源,其获取资源的时候却要你提供用户名和密码,那你铁定会慎重考虑一番。毕竟将用户名和密码全都交给第三方之后,它将会获得你在某个地方的所有权限,天知道它会干什么违法乱纪的事!因此,需要在不提供敏感信息的情况下,对第三方应用进行有限制的部分授权,这就是OAuth诞生的背景。

下面是一个典型的OAuth工作场景,有资源请求者、资源提供者、资源所有者典型三方。

如图,一次完整的OAuth流程如下:

  1. 消费者向服务提供者请求request token
  2. 服务提供者授予消费者request token (unauthorized)
  3. 消费者请求定向到资源拥有者
  4. 资源所有者对消费者授权,并将授权信息告知服务提供者,此时request token (authorized)
  5. 消费者请求凭借request token (authorized)向服务提供者请求access token
  6. 服务提供者提供access token
  7. 消费者凭借access token访问资源所有者授权其访问的资源

Tips:本质上是利用request token换取access token,request token生命周期短,access token一般来说生命周期较长,当然用户可以随时撤销授权

安全漏洞:
攻击者伪造request token,诱使用户进行授权,之后或通过设置回调地址获(回调方式),或抢先粘贴request token(非回调方式),来获取access token

OAuth 2.0

由于OAuth 1.0存在两个主要缺点——1. 签名算法过于复杂 2. 授权流程单一,因此催生了OAuth 2.0。在此版本中,将原来的3个参与者拓展为4个参与者(拆分service provider为authorization server和resource server),大概流程如下:

OAuth 2.0 改变:

  • 改签名为ssl来保证信息传输安全性
  • 提供四种授权方式以供选择:
    • Authorization Code
    • Implicit
    • Resource Owner Password Credentials
    • Client Credentials

Others

OpenId and OAuth

  • OpenId主认证(Authentication),是探究你是谁
  • OAuth主授权(Authorization),是探究你能做什么

Reference