1. 程式人生 > >QQ互聯賬號登入

QQ互聯賬號登入

本文說明的是根據某應用通過網頁的qq資訊來登入的過程。用途是利用QQ賬號就能快速自動註冊並能夠登入客戶應用。

從web伺服器與騰訊伺服器通訊獲取開房平臺使用者OpenID,再在應用伺服器的平臺伺服器生成賬號,在命名伺服器生成角色ID,在Token伺服器生成Token,然後返回客戶端。

客戶端可以根據角色ID和Token請求登入。

1、客戶應用的標識

在騰訊開放平臺網站申請騰訊應用,批准之後可獲得的客戶應用的標識id:

如client_id、oauth_consumer_key的值都是應用的id(101222571)。

騰訊驗證伺服器的地址:https://graph.qq.com/oauth2.0/authorize?

應用web伺服器提供給騰訊伺服器的回撥地址(redirect_uri ):比如 http://www.kkalk.cn

2、web伺服器與騰訊伺服器通訊

(1)申請客戶應用的使用者的訪問令牌

申請客戶應用的訪問令牌access_token

https://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=101222571&redirect_uri=http://www.kkalk.cn


騰訊校驗成功後會呼叫應用web伺服器的回撥地址,地址裡面包含客戶端的訪問令牌access_token
http://www.kkalk.cn/?#access_token=4EB4F7CFD29AFB216FED819042D1B6F5&expires_in=7776000

其中:

通過使用者驗證登入和授權,獲取Access Token,為下一步獲取使用者的OpenID做準備;
同時,Access Token是應用在呼叫OpenAPI訪問和修改使用者資料時必須傳入的引數。
access token由每次使用者登入時生成,過期時間預設為三個月,使用者再次登入時自動重新整理,請網站或應用做好防過期策略,或過期後提示使用者再次授權。


(2)申請使用者的openid

根據使用者的access_token 申請使用者的openid(騰訊伺服器根據客戶端應用為每個使用者提供一個唯一id,是一個32位元組16進位制字串)

https://graph.qq.com/oauth2.0/me?access_token=8F14187F81C3AA4160328873807A4F71

騰訊校驗成功後,返回openid,openid為使用者的分配唯一標識,以後不會改變
callback( {"client_id":"101222571","openid":"6A7F7C7C5F9D9FF02F41BAE31838C315"} ); 

其中:

通過輸入在上一步獲取的Access Token,得到對應使用者身份的OpenID。
OpenID是此網站上或應用中唯一對應使用者身份的標識,網站或應用可將此ID進行儲存,便於使用者下次登入時辨識其身份,或將其與使用者在網站上或應用中的原有賬號進行繫結。

(3)獲取騰訊使用者資訊

客戶應用根據該使用者的access_token,openid 可以獲取騰訊使用者的資訊

https://graph.qq.com/user/get_user_info?access_token=8F14187F81C3AA4160328873807A4F71&oauth_consumer_key=101222571&openid=6A7F7C7C5F9D9FF02F41BAE31838C315


騰訊校驗成功後,返回使用者資訊,例如:

{ "ret": 0, "msg": "", "is_lost":0, "nickname": "雲", "gender": "男", "province": "上海", "city": "閔行", "year": "1987", "figureurl": "http:\/\/qzapp.qlogo.cn\/qzapp\/101222571\/6A7F7C7C5F9D9FF02F41BAE31838C315\/30", "figureurl_1": "http:\/\/qzapp.qlogo.cn\/qzapp\/101222571\/6A7F7C7C5F9D9FF02F41BAE31838C315\/50", "figureurl_2": "http:\/\/qzapp.qlogo.cn\/qzapp\/101222571\/6A7F7C7C5F9D9FF02F41BAE31838C315\/100", "figureurl_qq_1": "http:\/\/q.qlogo.cn\/qqapp\/101222571\/6A7F7C7C5F9D9FF02F41BAE31838C315\/40", "figureurl_qq_2": "http:\/\/q.qlogo.cn\/qqapp\/101222571\/6A7F7C7C5F9D9FF02F41BAE31838C315\/100", "is_yellow_vip": "0", "vip": "0", "yellow_vip_level": "0", "level": "0", "is_yellow_year_vip": "0" } 

3、客戶應用web伺服器與平臺伺服器、以及瀏覽器前端通訊

客戶端應用需要根據互聯賬號OpenID生成客戶應用賬號以其唯一ID

(1)返回客戶應用的互聯賬戶

客戶應用的web伺服器傳送使用者OpenID到平臺伺服器,賬戶命名為 _qq互聯賬號OpenID,檢查該賬戶是否存在,不存在則生成,存在則返回該賬戶的登入資訊到web伺服器,進而返回給瀏覽器前端

(2)客戶應用的互聯賬戶的生成

平臺伺服器生成賬號,並向命名伺服器請求角色ID(沒有則生成),再向Token伺服器請求登入Token(沒有則生成),然後連同登入資訊返回web 伺服器以及瀏覽器前端。

客戶端檢查到瀏覽器返回,則回撥顯示角色ID和登入Token。

4、客戶端賬號登入

客戶端根據角色ID以及登入Token請求登入,然後開始登入。參考  http://blog.csdn.net/chenjiayi_yun/article/details/46804369 (請求記密碼登陸)