作者:unvs發(fā)布時間: 2013-09-27 11:47?
轉(zhuǎn)載自:http://kb.cnblogs.com/page/189153/
本想前段時間就把自己通過QQ OAuth1.0、OAuth2.0協(xié)議進行驗證而實現(xiàn)QQ登錄的心得及Demo實例分享給大家,可一直很忙,今天抽點時間說下OAuth1.0協(xié)議原理卓起,及講解下QQ對于Oauth1.0的認證開發(fā)蛔六。閑話多說了點锦募,下面直接進入主題粥血。
1迟几、OAuth的簡述
OAuth(Open Authorization呆贿,開放授權)是為用戶資源的授權定義了一個安全嚷兔、開放及簡單的標準,第三方無需知道用戶的賬號及密碼做入,就可獲取到用戶的授權信息冒晰,并且這是安全的。(我喜歡簡單明了竟块,這里沒看懂壶运,沒關系,接著往下面看)
2浪秘、OAuth的原理
(流程圖)
我在圖上分了四個步驟蒋情,下面是四步的講解:
第一步:用戶訪問第三方網(wǎng)站,比如:就是你需要使用QQ進行登錄的網(wǎng)站耸携;
第二步:你點擊QQ登錄后棵癣,第三方網(wǎng)站將會連接并進行請求,比如:你點擊登錄后夺衍,第三方網(wǎng)站會跳轉(zhuǎn)到QQ平臺狈谊,提示你進行登錄;
第三步:你要進行授權第三方網(wǎng)站對你的信息訪問的一個權限沟沙,比如:當你QQ登錄成功后河劝,QQ會提示你,是否授權第三方Web訪問你的用戶基本信息或其他的資源信息矛紫,這時你點擊授權即可赎瞎;
第四步:授權后,第三方Web即可訪問你剛才授權的資源信息含衔,比如:你的QQ基本信息-頭像煎娇、昵稱二庵、性別等贪染。
通過這個原理圖示及講解(圖是手工制作缓呛,有點草),相信大家都了解了OAuth這個原理的一個基本流程杭隙,若看不明白哟绊,你可以不用學習制作OAuth了,開個玩笑痰憎。(這步后票髓,大家知道什么原理了,但還是無法知道OAuth究竟是如何實現(xiàn)認證的铣耘,別急洽沟,接著往下看)
3、OAuth 1.0的認證流程
這里直接講解OAuth 1.0協(xié)議的認證機制(OAuth 2.0會在下一節(jié)中講述)蜗细,雖然現(xiàn)在很多平臺都是遵循OAuth 2.0裆操,但還是有開放OAuth 1.0平臺的,比如:新浪微博炉媒、QQ1.0平臺等踪区。
在OAuth 1.0認證中會用到三個重要的Url:
第一個:Request Token Url,獲取未授權的Token的Url吊骤;
第二個:User Authorization Url缎岗,請求用戶對Token進行授權的Url;
第三個:Request Access Url白粉,使用Token獲取Access Token的Url传泊。
上面是認證流程中用到的三個Url,在下面的流程示意圖中會體現(xiàn)到鸭巴,這是我講解OAuth幻燈片的一頁或渤,直接截圖下來進行講解:
第一步:網(wǎng)站向認證平臺請求一個未授權的Token,這個Request Token?Url是前面說的第一個Url奕扣;
第二步:跳轉(zhuǎn)至用戶授權頁面薪鹦,提示用戶進行登錄,并進行授權惯豆,返回獲得已授權的Token池磁,用到的User Authorization?Url是前面說的第二個Url;
第三步:通過已授權的Token楷兽,向認證平臺請求Access Token(數(shù)據(jù)令牌)地熄,用到的Request
Access?Url是前面說的第三個Url,返回后到這步整個認證流程就結束了芯杀,最后一步端考,是通過數(shù)據(jù)令牌等參數(shù)雅潭,調(diào)用接口獲取用戶信息,不完全算認證
的流程却特。(我喜歡簡潔明了扶供,認證流程就是這樣,相信通過圖示及講解都能明白裂明,若有不明白之處請留言)
4椿浓、QQ OAuth1.0認證中Url的調(diào)用及參數(shù)的傳遞
前面講了OAuth1.0的機制原理及認證流程,這篇文章著重講解QQ
OAuth1.0認證中Url的調(diào)用闽晦、各參數(shù)的傳遞扳碍、注意事項。而因為現(xiàn)在QQ開發(fā)平臺上仙蛉,已經(jīng)很少能找到OAuth1.0認證的說明開發(fā)文檔了笋敞,采用新
的2.0認證模式,所以簡單講述Url請求與返回參數(shù)的傳遞荠瘪,并沒有很詳細深入地講解夯巷,有什么問題大家可留言給我。
4.1巧还、請求未授權的臨時Token
新建一個頁面為QQLogin.aspx鞭莽,用來請求臨時Token及跳轉(zhuǎn)到用戶授權頁。下面是相關Url及參數(shù)介紹:
Request Token Url(請求臨時Token的Url):http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token
請求后麸祷,跳轉(zhuǎn)至引導用戶登錄的Url:http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize
第一個Url請求參數(shù)包含如下內(nèi)容:(紅色為必填澎怒、綠色為選填)
參數(shù)含義
oauth_consumer_key申請QQ登錄成功后,分配給網(wǎng)站的appid
oauth_nonce隨機字符串阶牍,所有oauth_nonce請使用int型值喷面。
oauth_timestampunix時間戳(從UTC時間1970年1月1日00:00:00到當前時刻的秒數(shù),不同語言中如何獲取請google/baidu之)走孽。
注意第三方服務器時間與騰訊服務器時間相差不能超過5分鐘惧辈。
oauth_version版本號,請固定使用1.0
oauth_signature_method簽名方法磕瓷,請固定使用HMAC-SHA1盒齿。
oauth_signature簽名值,用來提高傳輸過程參數(shù)的防篡改性困食。
簽名值的生成詳見【QQ登錄】簽名參數(shù)oauth_signature的說明
oauth_client_ip用戶的IP地址(可選)边翁,int型
返回的參數(shù)有:oauth_token(臨時令牌)、oauth_token_secret(臨時密鑰對應的令牌)
第二個Url需要傳遞的參數(shù)為:
參數(shù)含義
oauth_consumer_key分配給網(wǎng)站的appid硕盹。
oauth_token上一步中符匾,得到的oauth_token
oauth_callback回調(diào)地址,即登錄并授權后返回到你網(wǎng)站上的地址瘩例。
返回的參數(shù)有:
參數(shù)含義
oauth_token已授權的token
openid與APP通信的用戶key啊胶,它和QQ號碼一一對應甸各,訪問OpenAPI時必需。
同一個QQ號碼在不同的應用中有不同的OpenID焰坪。
oauth_signature簽名值趣倾。如果網(wǎng)站使用這一步返回的openid,則需要按規(guī)則生成簽名值琳彩,并與該簽名值比對誊酌,以驗證openid以及來源的可靠性部凑。
比對時生成簽名值的規(guī)則:使用HMAC-SHA1算法露乏,源串:openid+openid的timestamp(串中間不要添加'+'符號);密鑰:oauth_consumer_secret涂邀。
timestampopenid的時間戳
oauth_vericode授權驗證碼瘟仿。
4.2、請求Access Token數(shù)據(jù)令牌
上一步中比勉,我們寫了一個回調(diào)地址劳较,并順利得到一些參數(shù),下面就是拿這些參數(shù)來進行下一步操作浩聋,首先观蜗,得到數(shù)據(jù)令牌(只有拿到數(shù)據(jù)令牌才可以調(diào)用接口獲取用戶信息)。
Request Access Url(獲取Access Token請求Url):http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token
Url請求參數(shù)包含如下內(nèi)容:
參數(shù)含義
oauth_consumer_key分配給網(wǎng)站的appid
oauth_token已授權的的token衣洁,上一步返回的oauth_token
oauth_nonce隨機數(shù)
oauth_timestampunix時間戳(從UTC時間1970年1月1日00:00:00到當前時刻的秒數(shù)墓捻,不同語言中如何獲取請google/baidu之)
oauth_version版本號,請固定使用1.0
oauth_signature_method簽名方法坊夫,請固定使用HMAC-SHA1
oauth_signature簽名值砖第,用來提高傳輸過程參數(shù)的防篡改性。
簽名值的生成詳見【QQ登錄】簽名參數(shù)oauth_signature的說明
oauth_vericode授權驗證碼环凿,上一步返回的oauth_vericode
oauth_client_ip用戶的IP地址(可選)梧兼,int型
返回的參數(shù)如下:
參數(shù)含義
oauth_token具有訪問權限的access_token
oauth_token_secretaccess_token的密鑰
openid在第一步和本步驟中都返回了openid。使用本步驟返回的openid智听,更為安全
timestampopenid的時間戳
oauth_signature針對openid的簽名值
4.3羽杰、通過Access token(數(shù)據(jù)令牌)調(diào)用API接口,獲取用戶授權資源
請求Url:http://openapi.qzone.qq.com/user/get_user_info?(這里默認寫的是get_user_info接口)
請求參數(shù):
參數(shù)含義
oauth_consumer_key分配給網(wǎng)站的appid
oauth_token上一步返回的oauth_token
oauth_nonce隨機數(shù)到推,int型
oauth_timestampunix時間戳(從UTC時間1970年1月1日00:00:00到當前時刻的秒數(shù)考赛,不同語言中如何獲取請google/baidu之)。
oauth_version版本號环肘,固定使用1.0
oauth_signature_method簽名方法欲虚,固定使用HMAC-SHA1
oauth_signature簽名值,用來提高傳輸過程參數(shù)的防篡改性悔雹。
簽名值的生成詳見【QQ登錄】簽名參數(shù)oauth_signature的說明
openid上一步返回的openid复哆。
oauth_client_ip用戶的IP地址(可選)欣喧,int型
好了,上面就是整個QQ OAuth1.0認證流程中Url參數(shù)的請求與返回說明梯找,這OAuth1.0認證中唆阿,你會發(fā)現(xiàn)參數(shù)特別多,還有經(jīng)過HMAC-SHA1加密锈锤、簽名等操作驯鳖,特別麻煩、繁瑣久免,所以還是最好推薦使用OAuth 2.0認證協(xié)議進行接口開發(fā)浅辙。
下面這篇文章是QQ登錄制作過程中,公共返回碼說明(包含1.0阎姥、2.0)记舆,供大家參考,看是哪個階段出錯呼巴,然后對癥下藥泽腮,特別是參數(shù)的請求、傳遞是否正確衣赶,還有一個參數(shù)順序诊赊、簽名是否正確,這四點弄好府瞄,相信這個東西自然就實現(xiàn)了碧磅。
OAuth_QQ登錄_公共返回碼說明:點擊進入。
最后將自己開發(fā)制作的OAuth 1.0源代碼分享給大家摘能,代碼分享:點擊下載续崖。
5、OAuth2.0的認證流程
在OAuth2.0的處理流程团搞,主要分為以下四個步驟:
1)得到授權碼code
2)獲取access token
3)通過access token严望,獲取OpenID
4)通過access token及OpenID調(diào)用API,獲取用戶授權信息
上面是流程的大概四個步驟逻恐,在下面的流程示意圖中會得到體現(xiàn)像吻,這是我制作的一個幻燈片的流程圖(文章最后會附上制作的OAuth幻燈片分享給大家),這里就直接截圖下來進行講解:
第一步:首先直接跳轉(zhuǎn)至用戶授權地址复隆,即圖示 Request User Url
拨匆,提示用戶進行登錄,并給予相關資源授權挽拂,得到唯一的Auth code惭每,這里注意的是code只有10分鐘的有效期,對于安全考慮,相對于OAuth
1.0省了一步獲取臨時的Token台腥,并且有效期也進行了控制宏赘,比1.0認證簡化了很多,并安全一些黎侈;
第二步:得到授權code后察署,這一步就是請求access token,通過 圖示 Request access url 峻汉,生成得到數(shù)據(jù)Token贴汪;
第三步:通過Access Token請求OpenID,OpenID是用戶在此平臺的唯一標識休吠,通過圖示 Request info url 請求扳埂,然后得到OpenID;
第四步:通過第二步得到的數(shù)據(jù)Token蛛碌、第三步得到的OpenID及相關API聂喇,進行請求辖源,獲取用戶授權資源信息蔚携。(我喜歡簡潔明了,OAuth2.0認證流程就是這樣克饶,相信通過圖示及講解都能明白酝蜒,若有不明白之處請留言)
最后,分享自己關于OAuth1.0矾湃、2.0認證流程講解的幻燈片亡脑,結合文章來看,你會更容易理解邀跃。
----------------------------------------------------------------------------------------------
閱讀更多好文霉咨,請關注公眾號:
新雨社