天天看點

ouath2.0

OAuth 2.0定義了四種授權方式。

1.授權碼模式(authorization token)

2.簡化模式(implicit)

3.密碼模式(resource owner password credentials)

4.用戶端模式(client credential)

在詳細講解OAuth 2.0之前,先了解下面的幾個專業名詞,以便大家更好的去了解

(1)、third-party application :  第三方應用程式        --如CSDN部落格系統

(2)、http service : 服務提供商                                 --如微信

(3)、user-agent :  使用者代理                                     --如浏覽器

(4)、authorization server : 認證伺服器                    --伺服器提供商專門處理認證的伺服器

(5)、resource owner: 資源擁有者                            --比如我是微信使用者

運作流程圖如下:摘抄别人的(邏輯很清晰的圖)

ouath2.0

一、授權碼模式的圖解

ouath2.0

在(A)Client  Identifer 的url中,包含以下參數:

(1)    response_type:表示授權類型,必須。固定值為"code"

(2)    client_id : 用戶端ID ,必選

(3)    redirect_uri : 重定向URL,必選

(4)    scope:表示申請的權限範圍,可選

(5)   state:表示用戶端的目前狀态,可以指定任意值,認證伺服器會原封不動地傳回這個值。

例子

GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz
        &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com
           

在(C)Authorization Code 步驟中,伺服器回應用戶端的URI,包含以下參數:

  • code:表示授權碼,必選項。該碼的有效期應該很短,通常設為10分鐘,用戶端隻能使用該碼一次,否則會被授權伺服器拒絕。該碼與用戶端ID和重定向URI,是一一對應關系。
  • state:如果用戶端的請求中包含這個參數,認證伺服器的回應也必須一模一樣包含這個參數。
HTTP/1.1 302 Found            #302是重定向的http狀态碼
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA
          &state=xyz
           

D步驟中,用戶端向認證伺服器申請令牌的HTTP請求,包含以下參數:

  • grant_type:表示使用的授權模式,必選項,此處的值固定為"authorization_code"。
  • code:表示上一步獲得的授權碼,必選項。
  • redirect_uri:表示重定向URI,必選項,且必須與A步驟中的該參數值保持一緻。
  • client_id:表示用戶端ID,必選項。
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
           

E步驟中,認證伺服器發送的HTTP回複,包含以下參數:

  • access_token:表示通路令牌,必選項。
  • token_type:表示令牌類型,該值大小寫不敏感,必選項,可以是bearer類型或mac類型。
  • expires_in:表示過期時間,機關為秒。如果省略該參數,必須其他方式設定過期時間。
  • refresh_token:表示更新令牌,用來擷取下一次的通路令牌,可選項。
  • scope:表示權限範圍,如果與用戶端申請的範圍一緻,此項可省略。
HTTP/1.1 200 OK
     Content-Type: application/json;charset=UTF-8
     Cache-Control: no-store                        #Cache-Control : no-store 不緩存任何資料
     Pragma: no-caches

     {
       "access_token":"UNs15sc15Sc16Zcs16SD51S",
       "token_type":"example",
       "expires_in":3600,
       "refresh_token":"ZOKIneafonozn5SCd;",
       "example_parameter":"example_value"
     }

           

繼續閱讀