天天看點

Spring Security oAuth2 開放平台Spring Security oAuth2 開放平台

Spring Security oAuth2 開放平台

互動模型

互動模型涉及三方:

  • 資源擁有者:使用者
  • 用戶端:APP
  • 服務提供方:包含兩個角色
    • 認證伺服器
    • 資源伺服器

認證伺服器

認證伺服器負責對使用者進行認證,并授權給用戶端權限。認證很容易實作(驗證賬号密碼即可),問題在于如何授權。比如我們使用第三方登入 “有道雲筆記”,你可以看到如使用 QQ 登入的授權頁面上有 “有道雲筆記将獲得以下權限” 的字樣以及權限資訊

Spring Security oAuth2 開放平台Spring Security oAuth2 開放平台

認證伺服器需要知道請求授權的用戶端的身份以及該用戶端請求的權限。我們可以為每一個用戶端預先配置設定一個 id,并給每個 id 對應一個名稱以及權限資訊。這些資訊可以寫在認證伺服器上的配置檔案裡。然後,用戶端每次打開授權頁面的時候,把屬于自己的 id 傳過來,如:

http://www.funtl.com/login?client_id=yourClientId
           

随着時間的推移和業務的增長,會發現,修改配置的工作消耗了太多的人力。有沒有辦法把這個過程自動化起來,把人工從這些繁瑣的操作中解放出來?當開始考慮這一步,開放平台的成型也就是水到渠成的事情了。

oAuth2 開放平台

開放平台是由 oAuth2.0 協定衍生出來的一個産品。它的作用是讓用戶端自己去這上面進行注冊、申請,通過之後系統自動配置設定

client_id

,并完成配置的自動更新(通常是寫進資料庫)。

用戶端要完成申請,通常需要填寫用戶端程式的類型(Web、App 等)、企業介紹、執照、想要擷取的權限等等資訊。這些資訊在得到服務提供方的人工稽核通過後,開發平台就會自動配置設定一個

client_id

給用戶端了。

到這裡,已經實作了登入認證、授權頁的資訊展示。那麼接下來,當使用者成功進行授權之後,認證伺服器需要把産生的

access_token

發送給用戶端,方案如下:

  • 讓用戶端在開放平台申請的時候,填寫一個 URL,例如:http://www.funtl.com
  • 每次當有使用者授權成功之後,認證伺服器将頁面重定向到這個 URL(回調),并帶上

    access_token

    ,例如:http://www.funtl.com?access_token=123456789
  • 用戶端接收到了這個

    access_token

    ,而且認證伺服器的授權動作已經完成,剛好可以把程式的控制權轉交回用戶端,由用戶端決定接下來向使用者展示什麼内容

繼續閱讀