三方登錄oauth驗證

  1. Client:需要授權的客戶端,本文中就是【簡書】。
  2. Resource Owner:資源所有者,在本文中你可能會以爲是 QQ,但要想清楚,QQ是屬於個人的,所以在本文中資源所有者是指【QQ用戶】。
  3. Authorization Server:認證服務器,本文中特指【QQ互聯平臺】。
  4. Resource Server:資源服務器,顧名思義,用來專門保存資源的服務器,接受通過訪問令牌進行訪問。本文特指【QQ用戶信息中心】。
  • 授權碼(Authorization Code):相當於授權服務器口頭告訴簡書,用戶同意授權使用他的QQ登錄簡書了。
  • 令牌(Access Token):相當於臨時身份證。

302:https://m.kujiale.com/sns/oauth?type=qq&from=https%3A%2F%2Fm.kujiale.com%2Fsignin%3Fredir%3Dhttps%3A%2F%2Fm.kujiale.com%2F

M站服務器會響應一個重定向地址,指向qq授權登錄

 

 

M站服務器返回重定向地址:

 

注意到這次訪問帶了一個參數是callback,以便qq那邊授權成功再次讓瀏覽器發起這個callback請求。不然qq怎麼知道你讓我授權後要返回那個頁面啊,每天讓我授權的像M站這樣的網站這麼多。

認證服務器如何知道是簡書過來的認證請求?

另外,返回:

  • response_type:表示響應類型,必選項,此處的值固定爲"code";
  • client_id:表示客戶端的ID,用來標誌授權請求的來源,必選項;
  • redirect_uri:成功授權後的回調地址;
  • scope:表示申請的權限範圍,可選項;
  • state:表示客戶端的當前狀態,可以指定任意值,認證服務器會原封不動地返回這個值。

訪問https://graph.qq.com/oauth2.0/authorize

跳轉到qq的登錄頁面,用戶輸入賬號密碼點擊授權並登錄按鈕後,一定還會訪問qq服務器中校驗用戶名密碼的方法,若校驗成功,該方法會響應瀏覽器一個重定向地址,並附上一個code(授權碼)。

302:

訪問:https://www.kujiale.com/sns/callback/qq/bS5rdWppYWxlLmNvbQ==&code=xxx

  • grant_type:表示授權類型,此處的值固定爲"authorization_code",必選項;
  • client_id:表示從QQ互聯平臺申請到的客戶端ID,用來標誌請求的來源,必選項;
  • client_secret:這個是從QQ互聯平臺申請到的客戶端認證密鑰,機密信息十分重要,必選項;
  • redirect_uri:成功申請到令牌後的回調地址;
  • code:上一步申請到的授權碼。

校驗client真實性

  • 發送完該請求後,認證服務器驗證通過後就會發放令牌,並返回到簡書後臺,其中應該包含以下信息:
  • access_token:令牌
  • expires_in:access token的有效期,單位爲秒。
  • refresh_token:在授權自動續期步驟中,獲取新的Access_Token時需要提供的參數。

在此服務器收到請求後,做了兩件再次與QQ溝通的事,即模擬瀏覽器發起了兩次請求。一個是用拿到的code去換token,另一個就是用拿到的token換取用戶信息。最後將用戶信息儲存起來,返回給瀏覽器其首頁的視圖

 

 

參考https://www.cnblogs.com/sheng-jie/p/6564520.html

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