zoukankan      html  css  js  c++  java
  • Oauth2解读

    OAuth 2.0相对于OAuth来说是一个革命性的协议。它主要致力于简化客户端开发的认证流程。目前使用OAuth2的范围不仅仅只有web应用,还包括了桌面应用,移动设备和智能家庭设备。OAuth2.0的协议基于OAuth WRAP提议和IETF的OAuth WG。

    协议框架:

      简介:

      OAuth2.0框架使得第三方应用可以获得有限的接入另外一个HTTP 服务的权限,或者是资源拥有者和HTTP服务之间建立的关联,又或者是允许第三方的应用接入自身的权限。

      传统的OAuth模型是基于服务器-客户端模式。客户端利用资源拥有者的证书来向服务器请求特定资源。此时资源拥有者和第三方应用共享同一证书。当然,这种模型又很多缺陷:

      a.第三方应用需要存储资源拥有者的证书以便后续使用,但是这个证书一般是明文密码。

      b.服务器需要支持密码认证,

      c.第三方应用权限过大,可以访问用户所有资源。

      d.资源所有者在不取消所有第三方证书的情况下,不能取消某个第三方的证书,除非它改变该第三方应用的密码。

      e.为了不使用资源所有者的证书,客户端得到了另外一种替代的方案--一个字符串access-token,这个字符串代表了客户端所拥有的权限,生存周期和一些其他属性。access-token是由认证服务器发给第三方客户端的凭证,当然是经过资源拥有者所允许的。

      角色:

      在OAuth2.0中,主角有四个:

      资源拥有者(resource owner): 一般就是我们的用户自己。享有资源的所有权限。

      资源服务器(resource server): 资源存储的地方。

      客户端(client): 一般是我们的第三方应用,需要向资源服务器请求资源。

      认证服务器(authorization server): 这个一般是跟资源服务器一起,主要提供用户的接入认证,颁发证书。

      流程图:(摘自rfc6749)

    +--------+                               +---------------+
         |        |--(A)- Authorization Request ->|   Resource    |
         |        |                               |     Owner     |
         |        |<-(B)-- Authorization Grant ---|               |
         |        |                               +---------------+
         |        |
         |        |                               +---------------+
         |        |--(C)-- Authorization Grant -->| Authorization |
         | Client |                               |     Server    |
         |        |<-(D)----- Access Token -------|               |
         |        |                               +---------------+
         |        |
         |        |                               +---------------+
         |        |--(E)----- Access Token ------>|    Resource   |
         |        |                               |     Server    |
         |        |<-(F)--- Protected Resource ---|               |
         +--------+                               +---------------+
    

      一。客户端注册流程

        客户端类型:

          可信的(confidential ):客户端可以获取到服务端的信任(即可以获取受限的资源)。

          公开的(public):客户端仅能获取到资源拥有者在服务器端的存在状态。

          其实说白了public公开的客户端,只用来说明用户在某个服务器上注册过。(例如,某些网站可以通过weibo来注册)。confidential客户端就可以获取到用户在服务器上的资源了。

          认证服务器可以支持客户端同时拥有可信和公开的身份,或者只支持一种方式(此时需要客户端分成两个不同的客户端来发出请求)。

        客户端标识符:

          认证服务器会颁发给客户端一个客户端标识符--一个唯一的包含客户端信息的字符串,

        客户端密码:

          客户端提交到认证服务器的client_id和client_secret应该被放置在请求消息体里面。

        授权端点:authorization endpoint

          这个端点的作用是与用户交互,并且获得服务器的承认。认证服务器必须首先验证用户的身份(如用户名密码登陆,cookie session等)。

          认证服务器必须支持“GET“和”POST“方法。

      

  • 相关阅读:
    BZOJ 2956: 模积和
    BZOJ 1113: [Poi2008]海报PLA
    停课刷题总结-给自己一点鼓励吧
    BZOJ 2751: [HAOI2012]容易题(easy)
    Vijos 1100 加分二叉树
    BZOJ 1756: Vijos1083 小白逛公园
    BZOJ 1709: [Usaco2007 Oct]Super Paintball超级弹珠
    BZOJ 1652: [Usaco2006 Feb]Treats for the Cows
    BZOJ 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚
    BZOJ 1631: [Usaco2007 Feb]Cow Party
  • 原文地址:https://www.cnblogs.com/bracken/p/2866868.html
Copyright © 2011-2022 走看看