OAuth 1.0和OAuth 2.0

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ì)更容易理解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔓榄,一起剝皮案震驚了整個(gè)濱河市并炮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甥郑,老刑警劉巖逃魄,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異澜搅,居然都是意外死亡伍俘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門勉躺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來癌瘾,“玉大人,你說我怎么就攤上這事赂蕴×” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵概说,是天一觀的道長(zhǎng)碧注。 經(jīng)常有香客問我,道長(zhǎng)糖赔,這世上最難降的妖魔是什么萍丐? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮放典,結(jié)果婚禮上逝变,老公的妹妹穿的比我還像新娘。我一直安慰自己奋构,他們只是感情好壳影,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弥臼,像睡著了一般宴咧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上径缅,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天掺栅,我揣著相機(jī)與錄音烙肺,去河邊找鬼。 笑死氧卧,一個(gè)胖子當(dāng)著我的面吹牛桃笙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沙绝,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼搏明,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了闪檬?” 一聲冷哼從身側(cè)響起熏瞄,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谬以,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體由桌,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡为黎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了行您。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铭乾。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖娃循,靈堂內(nèi)的尸體忽然破棺而出炕檩,到底是詐尸還是另有隱情,我是刑警寧澤捌斧,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布笛质,位于F島的核電站,受9級(jí)特大地震影響捞蚂,放射性物質(zhì)發(fā)生泄漏妇押。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一姓迅、第九天 我趴在偏房一處隱蔽的房頂上張望敲霍。 院中可真熱鬧,春花似錦丁存、人聲如沸肩杈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扩然。三九已至,卻和暖如春编丘,著一層夾襖步出監(jiān)牢的瞬間与学,已是汗流浹背宠默。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恨诱,地道東北人室叉。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像卵佛,于是被迫代替她去往敵國(guó)和親杨赤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容