最近在用django框架寫一個商城項目(先後端分離),裏面用到的一些技術其餘項目也能夠借鑑,因而就想寫一些博客記錄,以防本身忘記,今天先寫一個關於登陸接口中引入QQ登陸接口的流程。python
關於QQ登陸接口的引入,在qq官方文檔有詳細說明,網址以下:django
http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0後端
不過該文檔中並無python的,須要本身去造輪子,下面我就來記錄一下流程。服務器
首先講一下準備工做,先去QQ提供的第三方接口網站申請一個appid和appkey,關於這兩個數據,我沒有深刻研究,由於跟個人業務邏輯沒什麼關聯,QQ官方對這兩個數據描寫以下:app
appid:應用的惟一標識。在OAuth2.0認證過程當中,appid的值即爲oauth_consumer_key的值。
appkey:appid對應的密鑰,訪問用戶資源時用來驗證應用的合法性。在OAuth2.0認證過程當中,appkey的值即爲oauth_consumer_secret的值。框架
而後是具體流程部分:首先來說一下大概的流程,前後端分離
首先來詳細講下第一步,這一步對應QQ官方的文檔中的獲取Access Token那一步中的第一步,查閱文檔,訪問的url爲https://graph.qq.com/oauth2.0/authorize,固然這裏咱們須要一些必填參數,因爲請求方式爲GET,因此參數只能以查詢字符串的形式發送,第一個參數是response_type,固定爲code,格式爲字符串,第二個參數是client_id,這個須要填寫你申請的appid,第三個參數爲redirect_uri,該參數需填寫成功受權後的回調地址,必須是註冊appid時填寫的主域名下的地址,建議設置爲網站首頁或網站的用戶中心。注意須要將url進行URLEncode。最後一個參數爲state,該參數表示client端的狀態值。用於第三方應用防止CSRF攻擊,成功受權後回調時會原樣帶回。在這裏咱們用來接收url中的next參數中的數據。訪問成功,用戶登陸後,會跳轉到回調連接,並帶上code參數和status參數。
網站
而後是第二步,這一步涉及兩個參數的請求,首先是access_token,這一步對應QQ官方的文檔中的獲取Access Token那一步中的第二步,查閱文檔,訪問的url爲https://graph.qq.com/oauth2.0/token,如上,這裏也有一些必填參數,第一個參數爲grant_type,默認爲「authorization_code」,咱們照填便可,第二個參數爲client_id,同第一步,第三個參數爲client_secret,這個須要填寫你申請的appkey,第四個參數爲code,即回調時傳過來的code參數,最後一個參數爲redirect_uri,同第一步。返回成功後,咱們能夠從返回的包中獲取到相應的數據,從返回的數據中咱們能夠獲得access_token的值url
相似:access_token=FE04************************CCE2&expires_in=7776000&refresh_token=88E4************************BE14spa
得到到對應的token後,會在向QQ服務器請求一個openid,這一步對應QQ官方的文檔中的獲取openid的那一步,訪問的url爲https://graph.qq.com/oauth2.0/me,這一步只有一個必傳參數access_token,即上一步請求獲得的token值,返回成功後,會獲得如下包數據
callback({"client_id":"YOUR_APPID", "openid":"YOUR_OPENID"})\n; 從該數據能夠獲得咱們須要的openid,根據對應的openid來返回對應的頁面。