OAuth 2.0 是目前最流行的受權機制,用來受權第三方應用,獲取用戶數據。html
這個標準比較抽象,使用了不少術語,初學者不容易理解。其實提及來並不複雜,下面我就經過一個簡單的類比,幫助你們輕鬆理解,OAuth 2.0 究竟是什麼。安全
我住在一個大型的居民小區。微信
小區有門禁系統。網絡
進入的時候須要輸入密碼。spa
我常常網購和外賣,天天都有快遞員來送貨。我必須找到一個辦法,讓快遞員經過門禁系統,進入小區。設計
我常常網購和外賣,天天都有快遞員來送貨。我必須找到一個辦法,讓快遞員經過門禁系統,進入小區。3d
若是我把本身的密碼,告訴快遞員,他就擁有了與我一樣的權限,這樣好像不太合適。萬一我想取消他進入小區的權力,也很麻煩,我本身的密碼也得跟着改了,還得通知其餘的快遞員。htm
有沒有一種辦法,讓快遞員可以自由進入小區,又沒必要知道小區居民的密碼,並且他的惟一權限就是送貨,其餘須要密碼的場合,他都沒有權限?blog
因而,我設計了一套受權機制。token
第一步,門禁系統的密碼輸入器下面,增長一個按鈕,叫作"獲取受權"。快遞員須要首先按這個按鈕,去申請受權。
第二步,他按下按鈕之後,屋主(也就是我)的手機就會跳出對話框:有人正在要求受權。系統還會顯示該快遞員的姓名、工號和所屬的快遞公司。
我確認請求屬實,就點擊按鈕,告訴門禁系統,我贊成給予他進入小區的受權。
第三步,門禁系統獲得個人確認之後,向快遞員顯示一個進入小區的令牌(access token)。令牌就是相似密碼的一串數字,只在短時間內(好比七天)有效。
第四步,快遞員向門禁系統輸入令牌,進入小區。
有人可能會問,爲何不是遠程爲快遞員開門,而要爲他單獨生成一個令牌?這是由於快遞員可能天天都會來送貨,次日他還能夠複用這個令牌。另外,有的小區有多重門禁,快遞員可使用同一個令牌經過它們。
咱們把上面的例子搬到互聯網,就是 OAuth 的設計了。
首先,居民小區就是儲存用戶數據的網絡服務。好比,微信儲存了個人好友信息,獲取這些信息,就必須通過微信的"門禁系統"。
其次,快遞員(或者說快遞公司)就是第三方應用,想要穿過門禁系統,進入小區。
最後,我就是用戶本人,贊成受權第三方應用進入小區,獲取個人數據。
簡單說,OAuth 就是一種受權機制。數據的全部者告訴系統,贊成受權第三方應用進入系統,獲取這些數據。系統從而產生一個短時間的進入令牌(token),用來代替密碼,供第三方應用使用。
令牌(token)與密碼(password)的做用是同樣的,均可以進入系統,可是有三點差別。
(1)令牌是短時間的,到期會自動失效,用戶本身沒法修改。密碼通常長期有效,用戶不修改,就不會發生變化。
(2)令牌能夠被數據全部者撤銷,會當即失效。以上例而言,屋主能夠隨時取消快遞員的令牌。密碼通常不容許被他人撤銷。
(3)令牌有權限範圍(scope),好比只能進小區的二號門。對於網絡服務來講,只讀令牌就比讀寫令牌更安全。密碼通常是完整權限。
上面這些設計,保證了令牌既可讓第三方應用得到權限,同時又隨時可控,不會危及系統安全。這就是 OAuth 2.0 的優勢。
注意,只要知道了令牌,就能進入系統。系統通常不會再次確認身份,因此令牌必須保密,泄漏令牌與泄漏密碼的後果是同樣的。這也是爲何令牌的有效期,通常都設置得很短的緣由。
OAuth 2.0 對於如何頒發令牌的細節,規定得很是詳細。具體來講,一共分紅四種受權類型(authorization grant),即四種頒發令牌的方式,適用於不一樣的互聯網場景。