3裆赵、OAuth 1.0的認(rèn)證流程
這里直接講解OAuth 1.0協(xié)議的認(rèn)證機(jī)制(OAuth 2.0會(huì)在下一節(jié)中講述),雖然現(xiàn)在很多平臺(tái)都是遵循OAuth 2.0,但還是有開放OAuth 1.0平臺(tái)的码倦,比如:新浪微博咽块、QQ1.0平臺(tái)等忽洛。
在OAuth 1.0認(rèn)證中會(huì)用到三個(gè)重要的Url:
第一個(gè):Request Token Url腻惠,獲取未授權(quán)的Token的Url;
第二個(gè):User Authorization Url欲虚,請(qǐng)求用戶對(duì)Token進(jìn)行授權(quán)的Url集灌;
第三個(gè):Request Access Url,使用Token獲取Access Token的Url苍在。
上面是認(rèn)證流程中用到的三個(gè)Url绝页,在下面的流程示意圖中會(huì)體現(xiàn)到,這是我講解OAuth幻燈片的一頁(yè)寂恬,直接截圖下來進(jìn)行講解:
第一步:網(wǎng)站向認(rèn)證平臺(tái)請(qǐng)求一個(gè)未授權(quán)的Token续誉,這個(gè)Request Token?Url是前面說的第一個(gè)Url;
第二步:跳轉(zhuǎn)至用戶授權(quán)頁(yè)面初肉,提示用戶進(jìn)行登錄酷鸦,并進(jìn)行授權(quán),返回獲得已授權(quán)的Token牙咏,用到的User Authorization?Url是前面說的第二個(gè)Url臼隔;
第三步:通過已授權(quán)的Token,向認(rèn)證平臺(tái)請(qǐng)求Access
Token(數(shù)據(jù)令牌)妄壶,用到的Request
Access?Url是前面說的第三個(gè)Url摔握,返回后到這步整個(gè)認(rèn)證流程就結(jié)束了,最后一步丁寄,是通過數(shù)據(jù)令牌等參數(shù)氨淌,調(diào)用接口獲取用戶信息,不完全算認(rèn)證的流程伊磺。(我喜歡簡(jiǎn)潔明了盛正,認(rèn)證流程就是這樣,相信通過圖示及講解都能明白屑埋,若有不明白之處請(qǐng)留言)
4豪筝、QQ OAuth1.0認(rèn)證中Url的調(diào)用及參數(shù)的傳遞
前面講了OAuth1.0的機(jī)制原理及認(rèn)證流程,這篇文章著重講解QQ
OAuth1.0認(rèn)證中Url的調(diào)用摘能、各參數(shù)的傳遞续崖、注意事項(xiàng)。而因?yàn)楝F(xiàn)在QQ開發(fā)平臺(tái)上团搞,已經(jīng)很少能找到OAuth1.0認(rèn)證的說明開發(fā)文檔了袜刷,采用新的2.0認(rèn)證模式,所以簡(jiǎn)單講述Url請(qǐng)求與返回參數(shù)的傳遞莺丑,并沒有很詳細(xì)深入地講解,有什么問題大家可留言給我。
4.1梢莽、請(qǐng)求未授權(quán)的臨時(shí)Token
新建一個(gè)頁(yè)面為QQLogin.aspx萧豆,用來請(qǐng)求臨時(shí)Token及跳轉(zhuǎn)到用戶授權(quán)頁(yè)。下面是相關(guān)Url及參數(shù)介紹:
Request Token Url(請(qǐng)求臨時(shí)Token的Url):http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token
請(qǐng)求后昏名,跳轉(zhuǎn)至引導(dǎo)用戶登錄的Url:http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize
第一個(gè)Url請(qǐng)求參數(shù)包含如下內(nèi)容:(紅色為必填涮雷、綠色為選填)
參數(shù)含義
oauth_consumer_key申請(qǐng)QQ登錄成功后,分配給網(wǎng)站的appid
oauth_nonce隨機(jī)字符串轻局,所有oauth_nonce請(qǐng)使用int型值洪鸭。
oauth_timestampunix時(shí)間戳(從UTC時(shí)間1970年1月1日00:00:00到當(dāng)前時(shí)刻的秒數(shù),不同語(yǔ)言中如何獲取請(qǐng)google/baidu之)仑扑。
注意第三方服務(wù)器時(shí)間與騰訊服務(wù)器時(shí)間相差不能超過5分鐘览爵。
oauth_version版本號(hào),請(qǐng)固定使用1.0
oauth_signature_method簽名方法镇饮,請(qǐng)固定使用HMAC-SHA1蜓竹。
oauth_signature簽名值,用來提高傳輸過程參數(shù)的防篡改性储藐。
簽名值的生成詳見【QQ登錄】簽名參數(shù)oauth_signature的說明
oauth_client_ip用戶的IP地址(可選)俱济,int型
返回的參數(shù)有:oauth_token(臨時(shí)令牌)、oauth_token_secret(臨時(shí)密鑰對(duì)應(yīng)的令牌)
第二個(gè)Url需要傳遞的參數(shù)為:
參數(shù)含義
oauth_consumer_key分配給網(wǎng)站的appid钙勃。
oauth_token上一步中蛛碌,得到的oauth_token
oauth_callback回調(diào)地址,即登錄并授權(quán)后返回到你網(wǎng)站上的地址辖源。
返回的參數(shù)有:
參數(shù)含義
oauth_token已授權(quán)的token
openid與APP通信的用戶key蔚携,它和QQ號(hào)碼一一對(duì)應(yīng),訪問OpenAPI時(shí)必需同木。
同一個(gè)QQ號(hào)碼在不同的應(yīng)用中有不同的OpenID浮梢。
oauth_signature簽名值。如果網(wǎng)站使用這一步返回的openid彤路,則需要按規(guī)則生成簽名值秕硝,并與該簽名值比對(duì),以驗(yàn)證openid以及來源的可靠性洲尊。
比對(duì)時(shí)生成簽名值的規(guī)則:使用HMAC-SHA1算法远豺,源串:openid+openid的timestamp(串中間不要添加'+'符號(hào));密鑰:oauth_consumer_secret坞嘀。
timestampopenid的時(shí)間戳
oauth_vericode授權(quán)驗(yàn)證碼躯护。
4.2、請(qǐng)求Access Token數(shù)據(jù)令牌
上一步中丽涩,我們寫了一個(gè)回調(diào)地址棺滞,并順利得到一些參數(shù)裁蚁,下面就是拿這些參數(shù)來進(jìn)行下一步操作,首先继准,得到數(shù)據(jù)令牌(只有拿到數(shù)據(jù)令牌才可以調(diào)用接口獲取用戶信息)枉证。
Request Access Url(獲取Access Token請(qǐng)求Url):http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token
Url請(qǐng)求參數(shù)包含如下內(nèi)容:
參數(shù)含義
oauth_consumer_key分配給網(wǎng)站的appid
oauth_token已授權(quán)的的token,上一步返回的oauth_token
oauth_nonce隨機(jī)數(shù)
oauth_timestampunix時(shí)間戳(從UTC時(shí)間1970年1月1日00:00:00到當(dāng)前時(shí)刻的秒數(shù)移必,不同語(yǔ)言中如何獲取請(qǐng)google/baidu之)
oauth_version版本號(hào)室谚,請(qǐng)固定使用1.0
oauth_signature_method簽名方法,請(qǐng)固定使用HMAC-SHA1
oauth_signature簽名值崔泵,用來提高傳輸過程參數(shù)的防篡改性秒赤。
簽名值的生成詳見【QQ登錄】簽名參數(shù)oauth_signature的說明
oauth_vericode授權(quán)驗(yàn)證碼,上一步返回的oauth_vericode
oauth_client_ip用戶的IP地址(可選)憎瘸,int型
返回的參數(shù)如下:
參數(shù)含義
oauth_token具有訪問權(quán)限的access_token
oauth_token_secretaccess_token的密鑰
openid在第一步和本步驟中都返回了openid入篮。使用本步驟返回的openid,更為安全
timestampopenid的時(shí)間戳
oauth_signature針對(duì)openid的簽名值
4.3含思、通過Access token(數(shù)據(jù)令牌)調(diào)用API接口崎弃,獲取用戶授權(quán)資源
請(qǐng)求Url:http://openapi.qzone.qq.com/user/get_user_info?(這里默認(rèn)寫的是get_user_info接口)
請(qǐng)求參數(shù):
參數(shù)含義
oauth_consumer_key分配給網(wǎng)站的appid
oauth_token上一步返回的oauth_token
oauth_nonce隨機(jī)數(shù),int型
oauth_timestampunix時(shí)間戳(從UTC時(shí)間1970年1月1日00:00:00到當(dāng)前時(shí)刻的秒數(shù)含潘,不同語(yǔ)言中如何獲取請(qǐng)google/baidu之)饲做。
oauth_version版本號(hào),固定使用1.0
oauth_signature_method簽名方法遏弱,固定使用HMAC-SHA1
oauth_signature簽名值盆均,用來提高傳輸過程參數(shù)的防篡改性。
簽名值的生成詳見【QQ登錄】簽名參數(shù)oauth_signature的說明
openid上一步返回的openid漱逸。
oauth_client_ip用戶的IP地址(可選)泪姨,int型
好了,上面就是整個(gè)QQ OAuth1.0認(rèn)證流程中Url參數(shù)的請(qǐng)求與返回說明饰抒,這OAuth1.0認(rèn)證中肮砾,你會(huì)發(fā)現(xiàn)參數(shù)特別多,還有經(jīng)過HMAC-SHA1加密袋坑、簽名等操作仗处,特別麻煩、繁瑣枣宫,所以還是最好推薦使用OAuth 2.0認(rèn)證協(xié)議進(jìn)行接口開發(fā)婆誓。
下面這篇文章是QQ登錄制作過程中,公共返回碼說明(包含1.0也颤、2.0)洋幻,供大家參考,看是哪個(gè)階段出錯(cuò)翅娶,然后對(duì)癥下藥文留,特別是參數(shù)的請(qǐng)求好唯、傳遞是否正確,還有一個(gè)參數(shù)順序厂庇、簽名是否正確渠啊,這四點(diǎn)弄好,相信這個(gè)東西自然就實(shí)現(xiàn)了权旷。
OAuth_QQ登錄_公共返回碼說明:點(diǎn)擊進(jìn)入。
最后將自己開發(fā)制作的OAuth 1.0源代碼分享給大家贯溅,代碼分享:點(diǎn)擊下載拄氯。
5、OAuth2.0的認(rèn)證流程
在OAuth2.0的處理流程它浅,主要分為以下四個(gè)步驟:
1)得到授權(quán)碼code
2)獲取access token
3)通過access token译柏,獲取OpenID
4)通過access token及OpenID調(diào)用API,獲取用戶授權(quán)信息
上面是流程的大概四個(gè)步驟姐霍,在下面的流程示意圖中會(huì)得到體現(xiàn)鄙麦,這是我制作的一個(gè)幻燈片的流程圖(文章最后會(huì)附上制作的OAuth幻燈片分享給大家),這里就直接截圖下來進(jìn)行講解:
第一步:首先直接跳轉(zhuǎn)至用戶授權(quán)地址镊折,即圖示
Request User Url 胯府,提示用戶進(jìn)行登錄,并給予相關(guān)資源授權(quán)恨胚,得到唯一的Auth
code骂因,這里注意的是code只有10分鐘的有效期,對(duì)于安全考慮赃泡,相對(duì)于OAuth
1.0省了一步獲取臨時(shí)的Token寒波,并且有效期也進(jìn)行了控制,比1.0認(rèn)證簡(jiǎn)化了很多升熊,并安全一些俄烁;
第二步:得到授權(quán)code后,這一步就是請(qǐng)求access token级野,通過 圖示 Request access url 页屠,生成得到數(shù)據(jù)Token;
第三步:通過Access Token請(qǐng)求OpenID勺阐,OpenID是用戶在此平臺(tái)的唯一標(biāo)識(shí)卷中,通過圖示 Request info url 請(qǐng)求,然后得到OpenID渊抽;
第四步:通過第二步得到的數(shù)據(jù)Token蟆豫、第三步得到的OpenID及相關(guān)API,進(jìn)行請(qǐng)求懒闷,獲取用戶授權(quán)資源信息十减。(我喜歡簡(jiǎn)潔明了栈幸,OAuth2.0認(rèn)證流程就是這樣,相信通過圖示及講解都能明白帮辟,若有不明白之處請(qǐng)留言)
最后速址,分享自己關(guān)于OAuth1.0、2.0認(rèn)證流程講解的幻燈片由驹,結(jié)合文章來看芍锚,你會(huì)更容易理解。