Oauth2詳解-介紹(一)

1.什么是OAuth2

OAuth(開放授權(quán))是一個開放標準木蹬,允許用戶授權(quán)第三方移動應(yīng)用訪問他們存儲在另外的服務(wù)提供者上的信息,而不需要將用戶名和密碼提供給第三方移動應(yīng)用或分享他們數(shù)據(jù)的所有內(nèi)容彭雾,OAuth2.0是OAuth協(xié)議的延續(xù)版本沪铭,但不向后兼容OAuth 1.0即完全廢止了OAuth1.0。

2.應(yīng)用場景

第三方應(yīng)用授權(quán)登錄:在APP或者網(wǎng)頁接入一些第三方應(yīng)用時峦朗,時長會需要用戶登錄另一個合作平臺,比如QQ竖般,微博甚垦,微信的授權(quán)登錄茶鹃。

image

原生app授權(quán):app登錄請求后臺接口涣雕,為了安全認證,所有請求都帶token信息闭翩,如果登錄驗證挣郭、請求后臺數(shù)據(jù)。

前后端分離單頁面應(yīng)用(spa):前后端分離框架疗韵,前端請求后臺數(shù)據(jù)兑障,需要進行oauth2安全認證,比如使用vue蕉汪、react后者h5開發(fā)的app流译。

3名詞說明

(1) Third-party application:第三方應(yīng)用程序,本文中又稱"客戶端"(client)者疤,比如打開知乎福澡,使用第三方登錄,選擇qq登錄驹马,這時候知乎就是客戶端革砸。
(2)HTTP service:HTTP服務(wù)提供商,本文中簡稱"服務(wù)提供商"糯累,即上例的qq算利。
(3)Resource Owner:資源所有者,本文中又稱"用戶"(user),即登錄用戶泳姐。
(4)User Agent:用戶代理效拭,本文中就是指瀏覽器。
(5)Authorization server:認證服務(wù)器,即服務(wù)提供商專門用來處理認證的服務(wù)器缎患。
(6)Resource server:資源服務(wù)器借笙,即服務(wù)提供商存放用戶生成的資源的服務(wù)器。它與認證服務(wù)器较锡,可以是同一臺服務(wù)器业稼,也可以是不同的服務(wù)器。

4運行流程

OAuth 2.0的運行流程如下圖蚂蕴,摘自RFC 6749低散。

OAuth運行流程

(A)用戶打開客戶端以后,客戶端要求用戶給予授權(quán)骡楼。
(B)用戶同意給予客戶端授權(quán)熔号。
(C)客戶端使用上一步獲得的授權(quán),向認證服務(wù)器申請令牌鸟整。
(D)認證服務(wù)器對客戶端進行認證以后引镊,確認無誤,同意發(fā)放令牌篮条。
(E)客戶端使用令牌弟头,向資源服務(wù)器申請獲取資源。
(F)資源服務(wù)器確認令牌無誤涉茧,同意向客戶端開放資
源赴恨。

5授權(quán)模式

  • 授權(quán)碼模式(authorization code)
  • 簡化模式(implicit)
  • 密碼模式(resource owner password credentials)
  • 客戶端模式(client credentials)
5.1授權(quán)碼模式

授權(quán)碼模式(authorization code)是功能最完整、流程最嚴密的授權(quán)模式伴栓。

(1)用戶訪問客戶端伦连,后者將前者導向認證服務(wù)器,假設(shè)用戶給予授權(quán)钳垮,認證服務(wù)器將用戶導向客戶端事先指定的"重定向URI"(redirection URI)惑淳,同時附上一個授權(quán)碼。

(2)客戶端收到授權(quán)碼饺窿,附上早先的"重定向URI"歧焦,向認證服務(wù)器申請令牌:GET /oauth/token?response_type=code&client_id=test&redirect_uri=重定向頁面鏈接。請求成功返回code授權(quán)碼短荐,一般有效時間是10分鐘倚舀。

(3)認證服務(wù)器核對了授權(quán)碼和重定向URI,確認無誤后忍宋,向客戶端發(fā)送訪問令牌(access token)和更新令牌(refresh token)痕貌。POST /oauth/token?response_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=重定向頁面鏈接。

5.2簡化模式

簡化模式(implicit grant type)不通過第三方應(yīng)用程序的服務(wù)器糠排,直接在瀏覽器中向認證服務(wù)器申請令牌舵稠,跳過了"授權(quán)碼"這個步驟,因此得名。所有步驟在瀏覽器中完成哺徊,令牌對訪問者是可見的室琢,且客戶端不需要認證。

image.png

流程步驟:

(A)客戶端將用戶導向認證服務(wù)器落追。
(B)用戶決定是否給于客戶端授權(quán)盈滴。
(C)假設(shè)用戶給予授權(quán),認證服務(wù)器將用戶導向客戶端指定的"重定向URI"轿钠,并在URI的Hash部分包含了訪問令牌巢钓。
(D)瀏覽器向資源服務(wù)器發(fā)出請求,其中不包括上一步收到的Hash值疗垛。
(E)資源服務(wù)器返回一個網(wǎng)頁症汹,其中包含的代碼可以獲取Hash值中的令牌。
(F)瀏覽器執(zhí)行上一步獲得的腳本贷腕,提取出令牌背镇。
(G)瀏覽器將令牌發(fā)給客戶端。

請求URL:

GET /authorize?response_type=token&client_id=s6BhdRkqt3&state=xyz
     &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
    Host: server.example.com
5.3用戶名密碼模式

密碼模式(Resource Owner Password Credentials Grant)中泽裳,用戶向客戶端提供自己的用戶名和密碼瞒斩。客戶端使用這些信息诡壁,向"服務(wù)商提供商"索要授權(quán)济瓢。在這種模式中,用戶必須把自己的密碼給客戶端妹卿,但是客戶端不得儲存密碼。這通常用在用戶對客戶端高度信任的情況下蔑鹦。一般不支持refresh token夺克。


image.png

步驟說明:
(A)用戶向客戶端提供用戶名和密碼。
(B)客戶端將用戶名和密碼發(fā)給認證服務(wù)器嚎朽,向后者請求令牌铺纽。
(C)認證服務(wù)器確認無誤后,向客戶端提供訪問令牌哟忍。

     POST /token HTTP/1.1
     Host: server.example.com
     Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
     Content-Type: application/x-www-form-urlencoded
 grant_type=password&username=johndoe&password=A3ddj3w

<article class="hentry">

5.4客戶端模式(Client Credentials Grant)

指客戶端以自己的名義狡门,而不是以用戶的名義,向"服務(wù)提供商"進行認證锅很。嚴格地說其馏,客戶端模式并不屬于OAuth框架所要解決的問題。在這種模式中爆安,用戶直接向客戶端注冊叛复,客戶端以自己的名義要求"服務(wù)提供商"提供服務(wù),其實不存在授權(quán)問題。

客戶端模式

它的步驟如下:
(A)客戶端向認證服務(wù)器進行身份認證褐奥,并要求一個訪問令牌咖耘。
(B)認證服務(wù)器確認無誤后,向客戶端提供訪問令牌撬码。

A步驟中儿倒,客戶端發(fā)出的HTTP請求,包含以下參數(shù):

  • granttype:表示授權(quán)類型呜笑,此處的值固定為"clientcredentials"义桂,必選項。
  • scope:表示權(quán)限范圍蹈垢,可選項慷吊。

     POST /token HTTP/1.1
     Host: server.example.com
     Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
     Content-Type: application/x-www-form-urlencoded

     grant_type=client_credentials

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市曹抬,隨后出現(xiàn)的幾起案子溉瓶,更是在濱河造成了極大的恐慌,老刑警劉巖谤民,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堰酿,死亡現(xiàn)場離奇詭異,居然都是意外死亡张足,警方通過查閱死者的電腦和手機触创,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來为牍,“玉大人哼绑,你說我怎么就攤上這事〉锱兀” “怎么了抖韩?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疫铜。 經(jīng)常有香客問我茂浮,道長,這世上最難降的妖魔是什么壳咕? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任席揽,我火速辦了婚禮,結(jié)果婚禮上谓厘,老公的妹妹穿的比我還像新娘幌羞。我一直安慰自己,他們只是感情好庞呕,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布新翎。 她就那樣靜靜地躺著程帕,像睡著了一般束亏。 火紅的嫁衣襯著肌膚如雪瘸恼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天匣摘,我揣著相機與錄音亏吝,去河邊找鬼岭埠。 笑死,一個胖子當著我的面吹牛蔚鸥,可吹牛的內(nèi)容都是我干的惜论。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼止喷,長吁一口氣:“原來是場噩夢啊……” “哼馆类!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弹谁,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤乾巧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后预愤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沟于,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年植康,在試婚紗的時候發(fā)現(xiàn)自己被綠了旷太。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡销睁,死狀恐怖供璧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情榄攀,我是刑警寧澤嗜傅,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站檩赢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏违寞。R本人自食惡果不足惜贞瞒,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趁曼。 院中可真熱鬧军浆,春花似錦、人聲如沸挡闰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赞季,卻和暖如春愧捕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背申钩。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工次绘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人撒遣。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓邮偎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親义黎。 傳聞我的和親對象是個殘疾皇子禾进,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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