什么是OAuth协议

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

OAuth 本身不存在一个标准的实现,后端开发者自己根据实际的需求和标准的规定实现。其步骤一般如下:

  1. 第三方要求用户给予授权

  2. 用户同意授权

  3. 根据上一步获得的授权,第三方向认证服务器请求令牌(token)

  4. 认证服务器对授权进行认证,确认无误后发放令牌

  5. 第三方使用令牌向资源服务器请求资源

  6. 资源服务器使用令牌向认证服务器确认令牌的正确性,确认无误后提供资源

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

任何身份认证,本质上都是基于对请求方的不信任所产生的。 同时,请求方是信任被请求方的,例如用户请求服务时,会信任服务方。所以,身份认证就是为了解决身份的可信任问题。

OAuth2.0中,简单来说有三方:用户(这里是指属于服务方的用户)、服务方(如微信、微博等)、第三方应用

  1. 服务方不信任用户,所以需要用户提供密码或其它可信凭据

  2. 服务方不信任第三方应用, 所以需要第三方提供自己交给它的凭据(如微信授权的code,AppID等)

  3. 用户部分信任第三方应用,所以用户愿意把自已在服务方里的某些服务交给第三方使用,但不愿意把自已在服务方的密码等交给第三方应用

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

OAuth2.0成员

  1. Resource Owner(资源拥有者:用户)

  2. Client (第三方接入平台:请求者)

  3. Resource Server (服务器资源:数据中心)

  4. Authorization Server (认证服务器)

OAuth2.0基本流程

步骤详解:

  1. Authorization Request,第三方用户请求授权

  2. Authorization Grant,用户同意授权后,会从服务方获取一次性用户授权凭据(如code码)给第三方

  3. Authorization Grant,第三方会把授权凭据以及服务方给它的的身份凭据(如AppId)一起交给服务方的认证服务器申请访问令牌

  4. Access Token,认证服务器核对授权凭据等信息,确认无误后,向第三方发送访问令牌Access Token等信息

  5. Access Token,通过这个Access TokenResource Server索要数据

  6. Protected Resource,资源服务器使用令牌向认证服务器确认令牌的正确性,确认无误后提供资源

这样服务方,一可以确定第三方得到了用户对此次服务的授权(根据用户授权凭据),二可以确定第三方的身份是可以信任的(根据身份凭据),所以,最终的结果就是,第三方顺利地从服务方获取到了此次所请求的服务

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

原文链接: 理解OAuth2.0认证与客户端授权码模式详解

最新文章

  1. tcpdump的使用以及通信协议中常见缩写涵义(持续不定期更新)
  2. c#学习<三>:特性
  3. [转载] 为 Key-Value 数据库实现 MVCC 事务
  4. php大力力 [029节] 做PHP项目如何下载js文件:使用腾讯浏览器把网上案例页面存储到本地
  5. C#的提交表单方式WebClient
  6. 用PHP写的一个简单的分页类 1.0版
  7. 贴一个CMemDC 代码,这东西真不错噢,短小精悍,可谓极品
  8. PostgreSQL数据库web维护客户端工具软件
  9. 我的第一个微信小程序
  10. Android为TV端助力 MediaPlayer 错误代码(error code)总结 转载
  11. java面向对象编程(五)--四大特征之抽象、封装
  12. xhr.withCredentials发送跨域请求凭证
  13. ASP.NET MVC导出excel npoi
  14. Java url爬虫
  15. Linux vps服务器国产面板wdcp的安装和使用方法
  16. VS2015开发环境的安装和配置 2016-07-03更新
  17. pyDay3
  18. [Openwrt 项目开发笔记]:Samba服务&vsFTP服务(四)
  19. 推荐一个快速了解移植uboot以及linux到新板子上的ppt教程
  20. JDK1.8改为JDK1.7过程

热门文章

  1. linux回顾
  2. 在Eclipse中导入web项目时的问题总结
  3. BZOJ1058或洛谷1110 [ZJOI2007]报表统计
  4. linux下创建密钥
  5. mysql编译好的简单安装
  6. c语言实验一
  7. target = e.target || e.srcElement(转载)
  8. Spring Beans和依赖注入
  9. union: git command
  10. PCL-CMAKELIST书写格式