OAuth2 概述

OAuth是什么

OAuth是Open Authorization 的简写,OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。
与以往的授权方式不同,OAuth的授权不会使第三方触及到用户的账号信息(如用户名密码)。
即第三方无需使用用户的用户名和密码就可以申请获得该用户资源的授权,因此OAuth是安全的。
OAuth本身不存在一个标准的实现,后端开发者根据实际的需求和标准的规定实现,具体步骤一般如下:

  1. 客户端要求用户给予授权
  2. 用户同意给予授权
  3. 根据上一步获得的授权,向认证服务器请求令牌(token)
  4. 认证服务器对授权进行认证,确认无误后发放令牌
  5. 客户端使用令牌,向资源服务器请求资源
  6. 资源服务器使用令牌向认证服务器确定令牌的正确性,令牌确认无误提供资源

    OAuth2 解决什么问题

    任何身份认证,本质上都是基于对请求方的不信任造成的
    同时,请求方是信任被请求方的,例如用户请求服务是,会信任服务方。
    所以,身份认证就是为了解决身份的可信任问题。
    在OAuth中简单来说有三方:用户(这里指服务方的用户)、服务方,第三方应用(客户端)。
  • 服务方不信任用户,所以需要用户提供密码或其他可信凭据。
  • 服务方不信任第三方,所以需要第三方提供自己交给它的凭据(通常的一些安全签名啥的就是)
  • 用户部分信任第三方,所以用户愿意把自己在服务方里面的一些服务交给第三方使用,但不愿意把自己在服务方的密码交给第三方。

在OAuth的流程中
在 OAuth 的流程中,用户登录了第三方的系统后,会先跳去服务方获取一次性用户授权凭据,再跳回来把它交给第三方,第三方的服务器会把授权凭据以及服务方给它的的身份凭据一起交给服务方,这样,服务方一可以确定第三方得到了用户对此次服务的授权(根据用户授权凭据),二可以确定第三方的身份是可以信任的(根据身份凭据),所以,最终的结果就是,第三方顺利地从服务方获取到了此次所请求的服务。

从上面的流程中可以看出,OAuth 完整地解决掉了用户、服务方、第三方 在某次服务时这三者之间的信任问题。