0%

Oauth2.0基础概念和流程

OAuth(Open Authorization)

OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第- 三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。

Oauth1.0与oauth2.0的区别

  • 一、授权过程
    • 2.0的用户授权过程有3步
      • 引导用户到授权服务器,请求用户授权,用户授权后返回 授权码(Authorization Code)
      • 客户端由授权码到授权服务器换取访问令牌(access token)
      • 用访问令牌去访问得到授权的资源
    • 1.0的用户授权过程有4步
      • 客户端到授权服务器请求一个授权令牌(request token&secret)
      • 引导用户到授权服务器请求授权
      • 用授权令牌到授权服务器换取访问令牌(access token&secret)
      • 用访问令牌去访问得到授权的资源
  • 二、安全性
    1.0协议每个token都有一个加密,2.0则不需要。这样来看1.0似乎更加安全,但是2.0要求使用https协议,安全性也更高一筹。
  • 三、易用和扩展
    2.0充分考虑了客户端的各种子态,因而提供了多种途径获取访问令牌。
    a)授权码
    b)客户端私有证书
    c)资源拥有者密码证书
    d)刷新令牌
    e)断言证书
    1.0只有一个用户授权流程。

OAuth2.0是为了解决什么问题?

  • 任何身份认证,本质上都是基于对请求方的不信任所产生的。同时,请求方是信任被请求方的,例如用户请求服务时,会信任服务方。所以,身份认证就是为了解决身份的可信任问题。
  • 在OAuth2.0中,简单来说有三方:用户(这里是指属于服务方的用户)、服务方(如微信、微博等)、第三方应用。
    服务方不信任用户,所以需要用户提供密码或其他可信凭据
    服务方不信任第三方应用,所以需要第三方提供自已交给它的凭据(如微信授权的code,AppID等)
    用户部分信任第三方应用,所以用户愿意把自已在服务方里的某些服务交给第三方使用,但不愿意把自已在服务方的密码等交给第三方应用

OAuth2.0成员和授权基本流程

  • OAuth2.0成员

    • Resource Owner(资源拥有者:用户)
    • Client (第三方接入平台:请求者)
    • Resource Server (服务器资源:数据中心)
    • Authorization Server (认证服务器)
  • OAuth2.0基本流程

    • 上帝视觉的流程
    • 步骤详解
      • Authorization Request, 第三方请求用户授权
      • Authorization Grant,用户同意授权后,会从服务方获取一次性用户授权凭据(如code码)给第三方
      • Authorization Grant,第三方会把授权凭据以及服务方给它的的身份凭据(如AppId)一起交给服务方的向认证服务器申请访问令牌
      • Access Token,认证服务器核对授权凭据等信息,确认无误后,向第三方发送访问令牌Access Token等信息
      • Access Token,通过这个Access Token向Resource Server索要数据
      • Protected Resource,资源服务器使用令牌向认证服务器确认令牌的正确性,确认无误后提供资源

这样的服务方,一可以确定第三方得到了用户对此次服务的授权(根据用户授权凭据),二可以确定第三方的身份是可以信任的(根据身份凭据),所以,最终的结果就是,第三方顺利地从服务方获取到了此次所请求的服务
从上面的流程中可以看出,OAuth2.0完整地解决了用户、服务方、第三方 在某次服务时这三者之间的信任问题

  • 授权码模式

    • 流程图
    • 参数详解
      • client_id:客户端ID
      • client_secret:客户端密码
      • grant_type:请求的类型,填写authorization_code。
      • code:调用authorize获得的code值。
      • redirect_uri:回调地址,需需与注册应用里的回调地址一致。