1. 程式人生 > >單點登入之使用cas基於Oauth2整合第三方登入

單點登入之使用cas基於Oauth2整合第三方登入

為什麼要使用第三方登入呢?
小編也是一個使用者站在使用者角度來考慮,並不希望每次遇到一個需要註冊登入的應用總是不斷的註冊新的帳號,帳號多了越是麻煩而且由於多個帳號設定不同的密碼記憶也是很困難的,故而大多數帳號密碼會設定為相同的密碼,這樣可能
這就會造成
1. 只要有一個第三方應用程式被破解,就會導致使用者密碼洩漏,多個應用資訊洩露.
2. 多個第三方應用登入也是個很麻煩的問題呢,哪怕取的使用者名稱和密碼相同也要重複登入.

OAuth就可以解決以上問題
首先是 OAuth 理解

名詞定義

(1) Third-party application:第三方應用程式又稱”客戶端”(client):比如csnd可以使用qq登入,此時可以將csdn看作第三方
(2)HTTP service:HTTP服務提供商,及類似於上述的qq
(3)Resource Owner:資源所有者,又稱”使用者”(user)
(4)User Agent:使用者代理,本文中就是指瀏覽器
(5)Authorization server:認證伺服器,即服務提供商專門用來處理認證的伺服器
(6)Resource server:資源伺服器,即服務提供商存放使用者生成的資源的伺服器

流程圖

Created with Raphaël 2.1.2客戶端客戶端使用者使用者認證伺服器認證伺服器資源伺服器資源伺服器1客戶端要求使用者給予授權以便以qq登入cnds2使用者同意授權3獲得使用者授權,向認證伺服器申請通行令牌token4認證伺服器確認無誤後發放令牌5客戶端使用令牌,向資源伺服器申請獲取資源6資源伺服器確認令牌無誤,同意向客戶端開放資源

客戶端的授權模式

客戶端必須得到使用者的授權(authorization grant),才能獲得令牌(access token)。OAuth 2.0定義了四種授權方式。

  • 授權碼模式(authorization code)qq採用的授權模式
  • 簡化模式(implicit)
  • 密碼模式(resource owner password credentials)
  • 客戶端模式(client credentials)

這裡主要說明的是qq採用的授權碼模式(authorization code)

它是功能最完整、流程最嚴密的授權模式。它的特點就是通過客戶端的後臺伺服器,與”服務提供商”的認證伺服器進行互動

這裡寫圖片描述

(A)使用者訪問客戶端,後者將前者導向認證伺服器。 (B)使用者選擇是否給予客戶端授權。
(C)假設使用者給予授權,認證伺服器將使用者導向客戶端事先指定的”重定向URI”(redirection URI),同時附上一個授權碼。
(D)客戶端收到授權碼,附上早先的”重定向URI”,向認證伺服器申請令牌。這一步是在客戶端的後臺的伺服器上完成的,對使用者不可見。
(E)認證伺服器核對了授權碼和重定向URI,確認無誤後,向客戶端傳送訪問令牌(access token)和更新令牌(refresh
token)。

  • A步驟中,客戶端申請認證的URI,包含以下引數:
    response_type:表示授權型別,必選項,此處的值固定為”code”
    client_id:表示客戶端的ID,必選項
    redirect_uri:表示重定向URI,可選項
    scope:表示申請的許可權範圍,可選項
    state:表示客戶端的當前狀態,可以指定任意值,認證伺服器會原封不動地返回這個值。

而對應的qq開放平臺提供的幫助文件
獲取Authorization Code
開啟瀏覽器,訪問如下地址(請將client_id,redirect_uri,scope等引數值替換為你自己的):

https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=[YOUR_APPID]&redirect_uri=[YOUR_REDIRECT_URI]&scope=[THE_SCOPE]