OAuth2.0入門(一)—— 基本概念詳解和圖文並茂講解四種授權類型

       OAuth全稱爲Open Authorization(開放授權)。OAuth協議爲用戶資源的授權提供了一個安全的、開放而又簡易的標準。與以往的授權方式不同之處是OAuth的授權不會使第三方觸及到用戶的帳號信息(如用戶名與密碼),即第三方無需使用用戶的用戶名與密碼就可以申請獲得該用戶資源的授權,因此OAUTH是安全的。——引用自百度百科

一、爲什麼需要OAuth2.0協議 

        簡單來說就是當第三方應用需要用戶保存在其他應用上的資源時,比如網易雲音樂的第三方登錄功能,需要獲取用戶在其他應用上的用戶名和頭像等信息,這時通過OAuth開放協議以一種安全的方式授權第三方應用去獲取這些資源。

詳細瞭解:爲什麼需要OAuth2.0

二、OAuth2.0 角色

  • Client:第三方應用,比如上面的網易雲音樂
  • Resource Owner:資源所有者,即用戶
  • Authorization Server:授權服務器,即提供第三方登錄服務的服務器,如QQ
  • Resource Server:擁有資源信息的服務器,通常和授權服務器屬於同一應用

三、Access Token 和 Refresh Token

Access Token是客戶端訪問資源服務器的令牌。通過這個令牌,客戶端可以訪問第三方應用上受保護的資源。但是Access Token有效期一般較短(這可以降低Acces Token泄漏而帶來的風險),當Access Token過期時用戶就需要頻繁的授權客戶端訪問資源,這非常影響用戶體驗,因此引入Refresh Token來獲取新的Access Token。

下面看看OAuth2.0的基本流程。

OAuth2.0 基本流程

  1. 客戶端請求獲取訪問令牌,並向授權服務器提供授權許可(這裏有四種認證方式)
  2. 授權服務器對客戶端身份進行認證,並校驗授權許可,如果校驗通過,則發放訪問令牌和刷新令牌
  3. 客戶端通過訪問令牌(Access Token)訪問受保護的資源
  4. 資源服務器校驗訪問令牌(Access Token),如果校驗通過,則提供服務,返回資源
  5. 重複(3)和(4)直到訪問令牌過期。如果客戶端訪問令牌(Access Token)已經過期,則認證服務器會返回InvalidTokenError異常(6),此時不能繼續訪問受保護的資源
  6. 當訪問令牌(Access Token)失效以後,資源服務器返回一個無效令牌錯誤
  7. 客戶端通過刷新令牌(Refresh Token)請求獲取一個新的訪問令牌
  8. 授權服務器對客戶端進行身份認證並校驗刷新令牌,如果校驗通過,則發放新的訪問令牌(並且,可以選擇發放新的刷新令牌)

四、4種授權類型

        爲了獲得訪問令牌(Token),客戶端需要先從資源所有者(用戶)那裏獲得授權。授權是以授權許可(Grant Type)的形式來表示的。OAuth定義了四種授權類型:

1、授權碼模式(Authorization Code Grant)

OAuth2.0授權碼模式--認證流程

        當用戶訪問資源時,比如在網易雲音樂中使用第三方登錄功能,例如QQ登錄,那麼這裏的資源就是用戶的QQ暱稱和頭像等信息。此時第三方應用(網易雲音樂)將發送請求到授權服務器(QQ)去獲取授權,此時授權服務器(QQ)將返回一個界面給用戶,用戶需要登錄到QQ,並同意授權網易雲音樂獲得某些信息(資源)。當用戶同意授權後,授權服務器將返回一個授權碼(Authorization Code)給第三方應用,此時第三方應用在通過client_id、client_secret(這是需要第三方應用在授權服務器去申請的)和授權碼去獲得Access Token和Refresh Token,此時授權碼將失效。然後就是第三方應用通過Access Token去資源服務器請求資源了,資源服務器校驗Access Token成功後將返回資源給第三方應用。

2、隱式授權(Implicit Grant)

       隱式授權又稱簡化授權模式,它和授權碼模式類似,只不過少了獲取授權碼的步驟,是直接獲取令牌token的,且沒有Refresh Token,適用於公開的瀏覽器單頁應用。因爲令牌直接從授權服務器返回,所以沒有安全保證,令牌容易因爲被攔截竊聽而泄露。

3、密碼模式(Resource Owner Password Credentials Grant)

OAuth2.0密碼模式

       首先資源所有者(用戶)提供自己的用戶名和密碼給客戶端(Client),然後客戶端(Client)攜帶從用戶那裏獲取的憑證去授權服務器請求Token, 授權服務器對客戶端進行身份認證,並校驗資源所有者的憑證,如果都校驗通過,則發放Token。

適用範圍:只適用於應用是受信任的場景。一個典型的例子是同一個企業內部的不同產品要使用本企業的 Oauth2.0 體系。在這種情況下,由於是同個企業,不需要向用戶展示“xxx將獲取以下權限”等字樣並詢問用戶的授權意向,而只需進行用戶的身份認證即可。這個時候,只需要用戶輸入憑證並直接傳遞給鑑權服務器進行授權即可。

4、客戶端授權模式(Client Credentials Grant)

OAuth2.0客戶端模式

       客戶端(Client)通過Client_id和Client_secret去授權服務器請求Token,授權服務器認證Client_id和Client_secret是否正確,若正確則發放Token給客戶端(Client)。最後客戶端通過AccessToken請求資源。

適用範圍:只適用於應用是受信任的場景。

五、參考

OAuth2.0認證和授權機制講解

The OAuth 2.0 Authorization Framework

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章