OAuth認證

1渴肉、什么是OAuth認證

OAuth(開放授權)是一個開放標準命咐,允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片壹堰,視頻,聯(lián)系人列表)爬骤,而無需將用戶名和密碼提供給第三方應用充石。
例如,我自己的應用盖腕,希望使用用戶(比如*恒)github上面某些文件赫冬,此時,用戶同意我的應用使用github的文件溃列,但是同時劲厌,不希望告訴應用他的github賬戶和密碼,因為這樣會造成用戶的信息泄漏听隐。而OAuth正是為了解決這個問題的一個標準补鼻,允許用戶讓第三方應用訪問在某一網站上存儲的私密的資源(如照片,視頻雅任,聯(lián)系人列表)风范,而無需將用戶名和密碼提供給第三方應用。

2沪么、OAuth認證過程

1. 首先硼婿,我(應用提供者)。需要在github(隱私資源)中禽车,注冊自己的應用寇漫,此時要告知github刊殉,我的應用需要哪些權限。之后州胳,github 會提供給我一個client_id记焊,client_secret以及一個redirect_uri。
2. 認證過程栓撞。

用戶使用我的應用時遍膜,點擊獲取google drive照片席纽,或者使用google賬戶登陸的時候途样,我的應用會引導用戶進入github的授權界面(此界面時github提供,和我的應用沒有關系)告喊。用戶提供出client_id岭粤,github就知道用戶是從我的應用讓他過來惜索,然后他就把我需要的權限告知用戶特笋,并詢問用戶是否同意剃浇。

// 用戶登錄 github,協(xié)商
GET //github.com/login/oauth/authorize

// 協(xié)商憑證
params = {
  client_id: "xxxx",
  redirect_uri: "http://my-application.com"
}

如果此時用戶覺得我要求的太多猎物,這些權限不想給我虎囚,那么此時認證過程就此結束。如果用戶覺得ok蔫磨,點擊了授權淘讥,那么頁面會跳轉到預先設定的redirect_uri并且附帶一個蓋了同意章的code。

// 協(xié)商成功后帶著蓋了章的 code
Location: http://my-application.com?code=xxx

3. 告訴github堤如,我要來取數據了蒲列。

上一步中,我獲得了用戶蓋了同意章的code搀罢,但是蝗岖,這個code只能表明,用戶允許我從githhub上獲取數據榔至,但是同時還需要對我應用進行認證抵赢。此時需要使用client_secret。

// 網站和 github 之間的協(xié)商
POST //github.com/login/oauth/access_token

// 協(xié)商憑證包括 github 給用戶蓋的章和 github 發(fā)給我的門票
params = {
  code: "xxx",
  client_id: "xxx",
  client_secret: "xxx",
  redirect_uri: "http://my-website.com"
}

拿著用戶蓋過章的 code 和能夠標識個人身份的 client_id唧取、client_secret 去拜訪 github铅鲤,拿到最后的綠卡 access_token。

// 拿到最后的綠卡
response = {
  access_token: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  scope: "user,gist"
  token_type: "bearer",
  refresh_token: "xxxx"
}
4. 訪問用戶數據
// 訪問用戶數據
GET //api.github.com/user?access_token=xxxxxxxxxxxxxxxx

之后就可以訪問用戶的數據了枫弟。
上一步 github 已經把最后的綠卡 access_token 給我了邢享,通過 github 提供的 API 加綠卡就能夠訪問用戶的信息了,能獲取用戶的哪些權限在 response 中也給了明確的說明淡诗,scope 為 user 和 gist骇塘,也就是只能獲取 user 組和 gist 組兩個小組的權限掸犬。

整個流程到這里就結束了。

官方rfc6749

圖示

3绪爸、例子

使用qq登陸豆瓣

點擊使用第三方登陸
點擊授權登陸

之后就成功使用qq登陸了豆瓣湾碎。
整個過程十分簡單,對于用戶來說奠货,就是在豆瓣的網頁上登陸了使用qq登陸介褥,然后就可以正常使用豆瓣的功能了。


分析一下整個過程

簡單來說递惋,上述例子中的豆瓣就是客戶端柔滔,QQ就是認證服務器,OAuth2.0就是客戶端和認證服務器之間由于相互不信任而產生的一個授權協(xié)議萍虽。要是相互信任那QQ直接把自己數據庫給豆瓣好了睛廊,你直接在豆瓣輸入qq賬號密碼查下數據庫驗證就登陸唄,還跳來跳去的多麻煩杉编。

就這這張圖超全,來說一下上述例子中的三個步驟在圖中的表現(xiàn)。所用到的請求路徑名稱都是虛構的邓馒,所附帶的請求參數忽略了一些非重點的嘶朱。

第一步:在豆瓣官網點擊用qq登錄

當你點擊用qq登錄的小圖標時,實際上是向豆瓣的服務器發(fā)起了一個 http://www.douban.com/leadToAuthorize 的請求光酣,豆瓣服務器會響應一個重定向地址疏遏,指向qq授權登錄,瀏覽器接到重定向地址 http://www.qq.com/authorize?callback=www.douban.com/callback 救军,再次訪問财异。并注意到這次訪問帶了一個參數是callback,以便qq那邊授權成功再次讓瀏覽器發(fā)起這個callback請求唱遭。不然qq怎么知道你讓我授權后要返回那個頁面啊戳寸。
至于訪問這個地址之后,qq那邊做出怎樣的回應胆萧,就是第二步的事情了庆揩。總之第一步即對應了圖中的這些部分跌穗。

第二步:跳轉到qq登錄頁面輸入用戶名密碼订晌,然后點授權并登錄

上一步中瀏覽器接到重定向地址并訪問 http://www.qq.com/authorize?callback=www.douban.com/callback

qq的服務器接受到了豆瓣訪問的authorize,在次例中所給出的回應是跳轉到qq的登錄頁面蚌吸,用戶輸入賬號密碼點擊授權并登錄按鈕后锈拨,一定還會訪問qq服務器中校驗用戶名密碼的方法,若校驗成功羹唠,該方法會響應瀏覽器一個重定向地址奕枢,并附上一個code(授權碼)娄昆。由于豆瓣只關心像qq發(fā)起authorize請求后會返回一個code,并不關心qq是如何校驗用戶的缝彬,并且這個過程每個授權服務器可能會做些個性化的處理萌焰,只要最終的結果是返回給瀏覽器一個重定向并附上code即可,所以這個過程在圖中并沒有詳細展開」惹常現(xiàn)把展開圖畫給大家扒俯。


第三步:跳回到豆瓣頁面,成功登錄

用戶在QQ登錄頁面點擊授權登陸后一疯,就直接跳轉到豆瓣首頁了撼玄,但其實經歷了很多隱藏的過程。

首先接上一步墩邀,QQ服務器在判斷登錄成功后掌猛,使頁面重定向到之前豆瓣發(fā)來的callback并附上code授權碼,即 callback=www.douban.com/callback

頁面接到重定向眉睹,發(fā)起 http://www.douban.com/callback請求

豆瓣服務器收到請求后荔茬,做了兩件再次與QQ溝通的事,即模擬瀏覽器發(fā)起了兩次請求辣往。一個是用拿到的code去換token兔院,另一個就是用拿到的token換取用戶信息殖卑。最后將用戶信息儲存起來站削,返回給瀏覽器其首頁的視圖。到此OAuth2.0授權結束孵稽。


參考地址

一張圖搞定OAuth2.0
簡述 OAuth 2.0 的運作流程

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末许起,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子菩鲜,更是在濱河造成了極大的恐慌园细,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件接校,死亡現(xiàn)場離奇詭異猛频,居然都是意外死亡,警方通過查閱死者的電腦和手機蛛勉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門鹿寻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诽凌,你說我怎么就攤上這事毡熏。” “怎么了侣诵?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵痢法,是天一觀的道長狱窘。 經常有香客問我,道長财搁,這世上最難降的妖魔是什么蘸炸? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮尖奔,結果婚禮上幻馁,老公的妹妹穿的比我還像新娘。我一直安慰自己越锈,他們只是感情好仗嗦,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甘凭,像睡著了一般稀拐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丹弱,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天德撬,我揣著相機與錄音,去河邊找鬼躲胳。 笑死蜓洪,一個胖子當著我的面吹牛,可吹牛的內容都是我干的坯苹。 我是一名探鬼主播隆檀,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粹湃!你這毒婦竟也來了恐仑?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤为鳄,失蹤者是張志新(化名)和其女友劉穎裳仆,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體孤钦,經...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡歧斟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了偏形。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片静袖。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖壳猜,靈堂內的尸體忽然破棺而出勾徽,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布喘帚,位于F島的核電站畅姊,受9級特大地震影響,放射性物質發(fā)生泄漏吹由。R本人自食惡果不足惜若未,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望倾鲫。 院中可真熱鬧粗合,春花似錦、人聲如沸乌昔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磕道。三九已至供屉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溺蕉,已是汗流浹背伶丐。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疯特,地道東北人哗魂。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像漓雅,于是被迫代替她去往敵國和親录别。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,327評論 25 707
  • 用到的組件 1故硅、通過CocoaPods安裝 2庶灿、第三方類庫安裝 3、第三方服務 友盟社會化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 14,627評論 1 180
  • 每到這個時候吃衅,眼睛便亮了起來,聽著室友的呼吸聲腾誉,所有的情緒也放下了徘层。 深夜,總是寂靜的利职,襯托著一點一滴的的聲響趣效。走...
    暮煙er閱讀 288評論 0 0
  • 【吃的對錯全寫在臉上】 人的臉是一面鏡子,不僅能反映出我們的精神面貌猪贪,更能反映健康狀況: 黑眼圈:吃得太素跷敬; 臉色...
    永玲閱讀 195評論 0 0
  • p2p財富公司排名 p2p財富公司排名 p2p財富公司排名
    沈恫亢86510閱讀 541評論 0 0