OAuth的機制原理講解及開發(fā)流程

作者: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認證流程講解的幻燈片亡脑,結合文章來看,你會更容易理解邀跃。

----------------------------------------------------------------------------------------------

閱讀更多好文霉咨,請關注公眾號:

新雨社

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拍屑,隨后出現(xiàn)的幾起案子途戒,更是在濱河造成了極大的恐慌,老刑警劉巖僵驰,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喷斋,死亡現(xiàn)場離奇詭異,居然都是意外死亡蒜茴,警方通過查閱死者的電腦和手機星爪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粉私,“玉大人顽腾,你說我怎么就攤上這事∨岛耍” “怎么了抄肖?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵秒赤,是天一觀的道長。 經(jīng)常有香客問我憎瘸,道長入篮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任幌甘,我火速辦了婚禮潮售,結果婚禮上,老公的妹妹穿的比我還像新娘锅风。我一直安慰自己酥诽,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布皱埠。 她就那樣靜靜地躺著肮帐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪边器。 梳的紋絲不亂的頭發(fā)上训枢,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音忘巧,去河邊找鬼恒界。 笑死,一個胖子當著我的面吹牛砚嘴,可吹牛的內(nèi)容都是我干的十酣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼际长,長吁一口氣:“原來是場噩夢啊……” “哼耸采!你這毒婦竟也來了?” 一聲冷哼從身側響起工育,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虾宇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后翅娶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體文留,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年竭沫,在試婚紗的時候發(fā)現(xiàn)自己被綠了燥翅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片响鹃。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡严卖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出建钥,到底是詐尸還是另有隱情,我是刑警寧澤凛膏,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布杨名,位于F島的核電站,受9級特大地震影響猖毫,放射性物質(zhì)發(fā)生泄漏台谍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一吁断、第九天 我趴在偏房一處隱蔽的房頂上張望趁蕊。 院中可真熱鬧,春花似錦仔役、人聲如沸掷伙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽任柜。三九已至,卻和暖如春沛厨,著一層夾襖步出監(jiān)牢的瞬間宙地,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工俄烁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绸栅,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓页屠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蓖柔。 傳聞我的和親對象是個殘疾皇子辰企,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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