API介紹5:認(rèn)證(2)

第五章:認(rèn)證(2)

第四章中,我們提到大多數(shù)網(wǎng)站使用用戶名和密碼作為身份驗(yàn)證的憑證。我們還討論到重復(fù)使用這些憑證訪問API是不安全的,所以API通常需要一個(gè)和用戶登錄網(wǎng)站時(shí)使用的不同的憑證集合招盲。常見的例子是密鑰。本章嘉冒,我們來看一下另一個(gè)解決方案曹货,開放授權(quán)(OAuth),這個(gè)是目前web上使用最廣泛的驗(yàn)證方案讳推。

讓生活更簡(jiǎn)單

是否有被逼完成下面這樣的注冊(cè)表單的經(jīng)歷顶籽?


Windows 8 注冊(cè)表單上的產(chǎn)品密鑰

在上面那樣的表單域中輸入一長(zhǎng)串的密鑰的用戶體驗(yàn)是非常糟糕的。首先银觅,你必須找到需要的密鑰礼饱。是的,當(dāng)你買了軟件之后究驴,它就會(huì)發(fā)送到你的收件箱里镊绪,但是一年之后呢,要找到它就很麻煩了(是從哪個(gè)郵箱發(fā)過來的洒忧?我是用哪個(gè)郵箱注冊(cè)的蝴韭?!)找到之后熙侍,你必須準(zhǔn)確無誤的輸入這個(gè)可惡的東西——打字錯(cuò)誤或遺漏某個(gè)字母就會(huì)得到一個(gè)錯(cuò)誤的結(jié)果榄鉴,甚至導(dǎo)致你還沒有注冊(cè)的軟件被鎖定!

強(qiáng)制用戶使用API密鑰的體驗(yàn)同樣糟糕蛉抓。輸入錯(cuò)誤的問題非常常見庆尘,并且它要求用戶手工完成客戶端和服務(wù)器之間的部分設(shè)置。用戶必須從服務(wù)器獲取密鑰巷送,然后給予客戶端驶忌。由于工具就意味著它應(yīng)該可以自動(dòng)工作,所以肯定還有更好的方案惩系。

開始OAuth位岔。OAuth解決的主要問題就是自動(dòng)完成密鑰的交換。它提供了一個(gè)標(biāo)準(zhǔn)的方法堡牡,用戶通過簡(jiǎn)單的幾個(gè)步驟就可以讓客戶端從服務(wù)器獲取一個(gè)密鑰抒抬。從用戶的角度來看,所有的OAuth都需要輸入憑證晤柄。而客戶端和服務(wù)器在幕后進(jìn)行工作擦剑,使客戶端獲取一個(gè)有效的密鑰。

目前OAuth有兩個(gè)版本,它們都有一個(gè)恰當(dāng)?shù)拿諳Auth 1和OAuth 2惠勒。要在和API通信的過程中使用它們進(jìn)行身份認(rèn)證赚抡,就有必要理解每個(gè)版本的步驟。因?yàn)樗鼈兪褂孟嗤墓ぷ髁骶牢荩覀儠?huì)討論OAuth 2的步驟涂臣,然后指出OAuth 的不同之處。

OAuth 2

我們首先需要了解OAuth交換過程中涉及的角色組件:

用戶 — 希望連接兩個(gè)網(wǎng)站的人

客戶端 — 被授權(quán)訪問用戶數(shù)據(jù)的網(wǎng)站

服務(wù)器 — 擁有用戶數(shù)據(jù)的網(wǎng)站

接下來售担,我們需要給出一個(gè)簡(jiǎn)單的免責(zé)聲明赁遗。OAuth 2的一個(gè)目標(biāo)是允許業(yè)務(wù)修改認(rèn)證過程適應(yīng)自己的需要。由于這種天生的可擴(kuò)展性族铆,API可以使用略有差異的步驟岩四。下面展示的是一個(gè)基于web的應(yīng)用的常見工作流。手機(jī)和桌面應(yīng)用的流程可能有輕微的差別哥攘。

這里就是OAuth 2的步驟剖煌。

  1. 用戶告訴客戶端去連接服務(wù)器


    ch5-1.gif

    用戶通過告訴客戶端他希望客戶端連接服務(wù)器來開始這個(gè)流程。通常是以點(diǎn)擊一個(gè)按鈕開始逝淹。

  2. 客戶端將用戶重定向到服務(wù)器


    ch5-callback-url.gif

    客戶端轉(zhuǎn)到服務(wù)器的網(wǎng)站耕姊,同時(shí)攜帶一個(gè)URL,服務(wù)器通過該URL轉(zhuǎn)回用戶認(rèn)證的網(wǎng)站创橄,這個(gè)URL叫做回調(diào)URL箩做。

  3. 用戶登錄到服務(wù)器莽红,授權(quán)客戶端訪問


    ch5-2.gif

    用戶使用他們的用戶名和密碼進(jìn)行服務(wù)器認(rèn)證妥畏。服務(wù)器現(xiàn)在可以確定它的一個(gè)用戶請(qǐng)求給予客戶端訪問這個(gè)用戶的賬戶和相關(guān)數(shù)據(jù)的權(quán)限。

  4. 服務(wù)器將用戶轉(zhuǎn)到客戶端安吁,同時(shí)攜帶認(rèn)證代碼


    ch5-3.gif

    服務(wù)器將用戶轉(zhuǎn)到客戶端(返回到步驟2的回調(diào)URL)醉蚁。在響應(yīng)中隱藏著給客戶端的一個(gè)唯一的認(rèn)證代碼。


    ch5-code.gif
  5. 客戶端使用認(rèn)證代碼+密鑰向服務(wù)器交換訪問令牌
    客戶端使用它收到的認(rèn)證代碼創(chuàng)建另一個(gè)發(fā)送到服務(wù)器的請(qǐng)求鬼店。請(qǐng)求中包括客戶端的密鑰网棍。當(dāng)服務(wù)器看到一個(gè)有效的認(rèn)證代碼和一個(gè)受信任的客戶端密鑰,它確定客戶端就是它所宣稱的那個(gè)妇智,并且現(xiàn)在它代表一個(gè)真正的用戶滥玷。服務(wù)器在響應(yīng)中返回一個(gè)訪問令牌。


    ch5-access-token.gif
  6. 客戶端從服務(wù)器獲取數(shù)據(jù)


    ch5-4.gif

    到這個(gè)時(shí)候巍棱,客戶端可以代表用戶訪問服務(wù)器惑畴。步驟6中的訪問令牌本質(zhì)上就是服務(wù)器上用戶的另一個(gè)密碼『结悖客戶端在每一個(gè)請(qǐng)求中都包括訪問令牌如贷,所以它可以直接和服務(wù)器進(jìn)行認(rèn)證。

客戶端刷新令牌(可選)

OAuth 2引入的一個(gè)特性就是讓訪問令牌過期。這種安全性的增強(qiáng)有助于保護(hù)用戶的賬戶——令牌過期的時(shí)間越短杠袱,被盜的令牌可能被惡意使用的時(shí)間也就越短尚猿,類似于信用卡號(hào)碼過一段時(shí)間就過期。令牌的有效期是由服務(wù)器設(shè)置的楣富。API可以在幾個(gè)小時(shí)到幾個(gè)月的時(shí)間里自由使用所有資源凿掂。一旦有效期結(jié)束,客戶端必須向服務(wù)器申請(qǐng)新的令牌纹蝴。

OAuth 1 有什么不同

OAuth版本之間有幾個(gè)主要的區(qū)別缠劝。其中一個(gè)我們已經(jīng)提過了,訪問令牌不過期骗灶。

另一個(gè)區(qū)別是OAuth 1包括了一個(gè)額外的步驟惨恭。在上文的步驟1和2之間,OAuth 1需要客戶端向服務(wù)器申請(qǐng)一個(gè)請(qǐng)求令牌耙旦。這個(gè)令牌充當(dāng)了 OAuth 2 中認(rèn)證代碼的角色脱羡,用來交換訪問令牌。

第三個(gè)區(qū)別是OAuth 1需要數(shù)字簽名免都。我們會(huì)跳過簽名如何工作的細(xì)節(jié)(你可以找到做這個(gè)工作的代碼庫)锉罐,但是知道為什么一個(gè)版本有簽名而另一個(gè)版本沒有還是值得的。請(qǐng)求簽名可以保護(hù)數(shù)據(jù)在客戶端和服務(wù)器之間移動(dòng)時(shí)不會(huì)被篡改绕娘。簽名允許服務(wù)器核實(shí)請(qǐng)求的真實(shí)性脓规。

然而,現(xiàn)在大部分API傳輸都發(fā)生在一個(gè)安全的通道上(HTTPS)险领。認(rèn)識(shí)到這一點(diǎn)之后侨舆,OAuth 2取消了簽名從而使得版本二更容易使用。取而代之的是OAuth 2依賴于其他的方法來保證傳輸?shù)臄?shù)據(jù)的安全绢陌。

授權(quán)

OAuth 2中另一個(gè)需要特別注意的概念是限制訪問挨下,正式名稱叫做授權(quán)。返回到第2步脐湾,當(dāng)用戶點(diǎn)擊按鈕允許客戶端訪問的時(shí)候臭笆,隱藏在下面的是客戶端請(qǐng)求的具體權(quán)限。這些權(quán)限稱為范圍秤掌,是OAuth2的另一個(gè)重要特色愁铺。它們?yōu)榭蛻舳颂峁┝艘粋€(gè)方法,客戶端可以請(qǐng)求訪問用戶數(shù)據(jù)的受限權(quán)限闻鉴,這樣用戶更容易信任客戶端茵乱。

范圍的強(qiáng)大之處在于這種限制是基于客戶端的。API密鑰則不同椒拗,它的限制是基于密鑰的似将,導(dǎo)致所有客戶端都是相同的获黔,OAuth范圍允許一個(gè)客戶端擁有權(quán)限X,另一個(gè)客戶端有權(quán)限X和Y在验。這就是說一個(gè)網(wǎng)站可以查看你的通訊錄玷氏,而另一個(gè)網(wǎng)站可以查看也可以編輯。

譯自

Chapter 5: Authentication, Part 2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腋舌,一起剝皮案震驚了整個(gè)濱河市盏触,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌块饺,老刑警劉巖赞辩,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異授艰,居然都是意外死亡辨嗽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門淮腾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糟需,“玉大人,你說我怎么就攤上這事谷朝≈扪海” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵圆凰,是天一觀的道長(zhǎng)杈帐。 經(jīng)常有香客問我,道長(zhǎng)专钉,這世上最難降的妖魔是什么挑童? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮驶沼,結(jié)果婚禮上炮沐,老公的妹妹穿的比我還像新娘争群。我一直安慰自己回怜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布换薄。 她就那樣靜靜地躺著玉雾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪轻要。 梳的紋絲不亂的頭發(fā)上复旬,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音冲泥,去河邊找鬼驹碍。 笑死壁涎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的志秃。 我是一名探鬼主播怔球,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼浮还!你這毒婦竟也來了竟坛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤钧舌,失蹤者是張志新(化名)和其女友劉穎担汤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洼冻,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡崭歧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撞牢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驾荣。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖普泡,靈堂內(nèi)的尸體忽然破棺而出播掷,到底是詐尸還是另有隱情,我是刑警寧澤撼班,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布歧匈,位于F島的核電站,受9級(jí)特大地震影響砰嘁,放射性物質(zhì)發(fā)生泄漏件炉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一矮湘、第九天 我趴在偏房一處隱蔽的房頂上張望斟冕。 院中可真熱鬧,春花似錦缅阳、人聲如沸磕蛇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秀撇。三九已至,卻和暖如春向族,著一層夾襖步出監(jiān)牢的瞬間呵燕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工件相, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留再扭,地道東北人氧苍。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像泛范,于是被迫代替她去往敵國(guó)和親候引。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理敦跌,服務(wù)發(fā)現(xiàn)澄干,斷路器,智...
    卡卡羅2017閱讀 134,665評(píng)論 18 139
  • 轉(zhuǎn)載本文需注明出處:微信公眾號(hào)EAWorld柠傍,違者必究麸俘。 本文目錄: 一、單體應(yīng)用 VS 微服務(wù) 二惧笛、微服務(wù)常見安...
    72a1f772fe47閱讀 8,557評(píng)論 3 25
  • 本文目錄:一从媚、單體應(yīng)用 VS 微服務(wù)二、微服務(wù)常見安全認(rèn)證方案三患整、JWT介紹四拜效、OAuth 2.0 介紹五、思考總...
    挨踢的懶貓閱讀 17,975評(píng)論 5 29
  • 1. 微服務(wù)架構(gòu)介紹 1.1 什么是微服務(wù)架構(gòu)各谚? 形像一點(diǎn)來說紧憾,微服務(wù)架構(gòu)就像搭積木,每個(gè)微服務(wù)都是一個(gè)零件昌渤,并使...
    靜修佛緣閱讀 6,645評(píng)論 0 39
  • 主要特點(diǎn) Proxy代理 不再使用 defineProperty(getter/setter)監(jiān)聽對(duì)象單個(gè)屬性赴穗,性...
    李霖弢閱讀 226評(píng)論 0 0