關(guān)于OAuth 2.0不同Grant Type的理解和使用

大家都知道OAuth 2.0 有四種不同的grant type氏涩,分不同的業(yè)務(wù)場(chǎng)景來(lái)使用,我在前面的一篇文章也有粗略講過(guò) 微服務(wù)架構(gòu)學(xué)習(xí)筆記之一認(rèn)證和授權(quán) - 大概怎么去按照不同業(yè)務(wù)場(chǎng)景來(lái)使用OAuth 2.0的不同grant type, 比如下面這張圖

image

但是很多時(shí)候還是不能很好的理解為什么要這么劃分意系,關(guān)鍵點(diǎn)在哪里饺汹?這又回退到我們要清楚的知道OAuth 2.0 四種不同的grant type的區(qū)別是什么。

首先我們先羅列4種的OAuth 2.0的grant type
Authorization Code Flow

authorization-code-flow.jpg

Implicit Flow

implicit-flow.jpg

Resource Owner Password Credential Flow

resource-owner-pwd-flow.jpg

Client Credential Flow

client-credential-flow.jpg

要回答這四種不同的grant type的區(qū)別是什么夸溶,需要考慮以下維度:

  1. 需不需要用戶輸入用戶名密碼凶硅?
  2. Client Application是第三方應(yīng)用還是第一方應(yīng)用?
  3. 用戶輸入用戶名和密碼的界面是誰(shuí)來(lái)提供的捷绑?Authorization Server還是第三方應(yīng)用编检?
  4. Client Application(需要訪問(wèn)你的資源的應(yīng)用)能否感知和存儲(chǔ)authorization code和access token?

對(duì)于第一個(gè)問(wèn)題扰才,4種grant type中只有client credential flow是不需要用戶輸入用戶名和密碼,這也就不難解釋為什么在只有機(jī)器執(zhí)行的場(chǎng)景下衩匣,那么就需要采用client credential flow這種OAuth 2.0的方式琅捏,只需要約定好client id和client secret就可以去換取access token來(lái)進(jìn)行resource的訪問(wèn)生百。這種業(yè)務(wù)場(chǎng)景一般發(fā)生在有些服務(wù)器需要定時(shí)執(zhí)行一些job的情況柄延。

對(duì)于第二個(gè)問(wèn)題,Client Application是第三方應(yīng)用還是第一方應(yīng)用市俊?一般來(lái)講滤奈,如果是第一方應(yīng)用(自己開(kāi)發(fā)的應(yīng)用)一般我們都認(rèn)為要安全一些,因?yàn)椴粫?huì)故意的去泄露訪問(wèn)resource的access token绅你, 所以一般第一方應(yīng)用我們可以使用簡(jiǎn)單的resource owner password credential flow, 這種OAuth 2.0 grant type 節(jié)省了通過(guò)code去交換access token這一步驟(實(shí)際上就是節(jié)省了一次網(wǎng)絡(luò)請(qǐng)求來(lái)回)昭躺,直接通過(guò)用戶名,密碼去獲取access token领炫。而第三方應(yīng)用我們需要采用更加安全的OAuth 2.0 flow, 比如authorization code flow 或者 implicit flow. 至于究竟是選擇authorization code flow 還是 implicit flow, 那么可以參見(jiàn)下面第四個(gè)問(wèn)題的回答。

對(duì)于第三個(gè)問(wèn)題针史, 這個(gè)也是出于安全性的考慮,我們可以看到啄枕,authorization code flow 和 implicit flow 的用戶輸入credential的界面都是由authorization server提供的H5 page,而resource owner password credential flow則是由client application提供的page (可以是Native App Page, 也可以是H5 Page), 由authorization server提供的H5 page會(huì)更加安全一點(diǎn)泌参。

對(duì)于第四個(gè)問(wèn)題常空,Client Application(需要訪問(wèn)你的資源的應(yīng)用)能否感知和存儲(chǔ)authorization code和access token? 我們都知道最常用的是authorization code flow,它是最安全的铣缠,它需要先通過(guò)用戶的身份驗(yàn)證昆禽,然后獲得一個(gè)code,再拿這個(gè)code去authorization server交換access token和refresh token醉鳖。而我們都知道access token本身是有時(shí)效性的,如果有人很容易的拿到code 或 refresh token壮韭,那么就基本上可以隨意隨時(shí)的去訪問(wèn)你的resource了纹因,因?yàn)樗梢圆粩嗟耐ㄟ^(guò)refresh token 去刷新access token。 而為什么第三方的SPA使用的是implicit flow 而第三方的Native App卻使用的是authorization code flow辐怕? 理論上第三方應(yīng)用都應(yīng)該使用authorization code flow,但是如果你仔細(xì)看下是牢,implicit flow中是沒(méi)有code 和 refresh token的陕截,而SPA應(yīng)用(本質(zhì)上是web,需要通過(guò)瀏覽器的)更加容易去暴露code 和 refresh token农曲, 所以才在第三方的SPA應(yīng)用中使用了implicit flow驻债,而只給了access token形葬, 一旦過(guò)期,則需要重新用戶名密碼驗(yàn)證淌实。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猖腕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子放坏,更是在濱河造成了極大的恐慌老玛,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件互亮,死亡現(xiàn)場(chǎng)離奇詭異余素,居然都是意外死亡炊昆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)视乐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)敢茁,“玉大人,你說(shuō)我怎么就攤上這事彰檬。” “怎么了捧颅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵较雕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)妆毕,這世上最難降的妖魔是什么贮尖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮闰蛔,結(jié)果婚禮上图柏,老公的妹妹穿的比我還像新娘。我一直安慰自己蚤吹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布繁涂。 她就那樣靜靜地躺著二驰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矿酵。 梳的紋絲不亂的頭發(fā)上矗积,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音辜腺,去河邊找鬼乍恐。 笑死评疗,一個(gè)胖子當(dāng)著我的面吹牛禁熏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胧华,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼有巧!你這毒婦竟也來(lái)了悲没?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤甜橱,失蹤者是張志新(化名)和其女友劉穎栈戳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體子檀,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褂痰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缩歪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苟翻,死狀恐怖骗污,靈堂內(nèi)的尸體忽然破棺而出沈条,到底是詐尸還是另有隱情,我是刑警寧澤屋厘,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布月而,位于F島的核電站,受9級(jí)特大地震影響父款,放射性物質(zhì)發(fā)生泄漏瞻凤。R本人自食惡果不足惜世杀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛛壳。 院中可真熱鬧所刀,春花似錦、人聲如沸浮创。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雏掠。三九已至,卻和暖如春乡话,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绑青。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工芍碧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奠涌,地道東北人降狠。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓庇楞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吕晌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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