- Client:需要授權的客戶端,本文中就是【簡書】。
- Resource Owner:資源所有者,在本文中你可能會以爲是 QQ,但要想清楚,QQ是屬於個人的,所以在本文中資源所有者是指【QQ用戶】。
- Authorization Server:認證服務器,本文中特指【QQ互聯平臺】。
- Resource Server:資源服務器,顧名思義,用來專門保存資源的服務器,接受通過訪問令牌進行訪問。本文特指【QQ用戶信息中心】。
- 授權碼(Authorization Code):相當於授權服務器口頭告訴簡書,用戶同意授權使用他的QQ登錄簡書了。
- 令牌(Access Token):相當於臨時身份證。
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換取用戶信息。最後將用戶信息儲存起來,返回給瀏覽器其首頁的視圖