OAuth 授權協議 | 都雲原生時代了,我們應該多懂一點OAuth ?

黑客帝國

We are not here because we are free .we are here because we are not free.

我們在這裏不是因爲我們自由,我們在這裏是因爲我們不自由。——《黑客帝國》

寫在開頭

在這個互聯網最美好的時代,隨着業務產品線的增多,業務應用平臺逐漸增多後,每個系統單獨管理各自的用戶數據容易形成信息孤島,分散的用戶管理模式阻礙了企業應用向平臺化演進。當業務產品線發展到一定規模,構建統一的標準化賬戶管理體系將是必不可少的,構建一套互聯網雲平臺的重要基礎設施,能夠爲平臺帶來統一的帳號管理、身份認證、用戶授權等基礎能力,爲企業帶來諸如跨系統單點登錄、第三方授權登錄等基礎能力,爲構建開放平臺和業務生態提供了必要條件和基本準繩。
關於OAuth授權協議的問題,也許我們中的大多數都還是從玩Github 開始的,或者就是從阮一峯的網絡日誌看到的,不論是何種情況下接觸到OAuth的。我們都要相信,OAuth的正確打開方式,絕對不是三言兩語的事情,需要經過系統的分析和項目實戰,纔會有不一樣的味道,不然我們遇到的都是壞味道。

Oauth

OAuth授權協議

OAuth授權協議

An open protocol to allow secure API authorization in a simple and standard method from web, mobile and desktop applications.

基本定義

OAuth授權協議爲用戶資源的授權提供了一個安全的、開放而又簡易的標準。與以往的授權方式不同之處是OAUTH的授權不會使第三方觸及到用戶的帳號信息(如用戶名與密碼),即第三方無需使用用戶的用戶名與密碼就可以申請獲得該用戶資源的授權,因此OAUTH是安全的。OAuth是Open Authorization的簡寫。

一般來說,OAuth是一個授權協議,它允許軟件應用代表(而不是充當)資源擁有者去訪問資源擁有者的資源。應用向資源擁有者請求授權,然後取得令牌(token),並用它來訪問資源,並且資源擁有者不用嚮應用提供用戶名和密碼等敏感數據。目前常用的是2.0版本,又稱爲OAuth 2.0 。從官網來看,新版本2.1不久面世。

其實挑點實際話講,OAuth 2.0 並不是一門新的技術,從 2007 年 OAuth 1.0 面世,到 2011 年發佈 OAuth 2.0 草案。但是,看似簡單的 OAuth 2.0 會讓我們望而卻步,在如何使用授權碼流程上躊躇不前。比如,在 Web 應用中到底應該怎麼使用授權碼流程,移動 App 中還能使用授權碼流程嗎?
當我帶着這些問題嘗試到網上搜索資料時,那些不成體系的資料着實也讓我走了不少彎路。不知道你是不是也被下面問題困擾着:

  1. 開發一個 Web 應用,當使用 OAuth 2.0 的時候,擔心授權碼被攔截,卻因爲沒有較好的解決方法而一籌莫展
  2. 開發一款移動 App,當使用 OAuth 2.0 的時候,在確定是否需要 Server 端上,花費了大把的時間
  3. 開發一個小程序,當使用 OAuth 2.0 的時候,在確定是否需要 Server 端上,需要考慮的場景是否足夠多
  4. 開發一個面向多產品的統一授權認證平臺時,比如open-iam,對於PC平臺,後臺平臺,門戶平臺,移動端APP平臺,小程序平以及大數據監控平臺,這樣的一個需求時,當使用 OAuth 2.0 的時候,是否能實現和滿足需求
  5. 開發一個統一授權認證平臺,對於用戶和資源之間如何界定設置,前後端分離模式,又如何保證用戶登錄實現平臺的跳轉和通信
  6. 在不同架構模式背景下,對於OAuth的使用,其中的技術選型又會有怎樣的差異,更多情況下,我們的技術選型是否可取

從大方向上總結來看,OAuth 2.0 這種授權協議,就是保證第三方(軟件)只有在獲得授權之後,纔可以進一步訪問授權者的數據。因此,我們常常還會聽到一種說法,OAuth 2.0 是一種安全協議。現在訪問授權者的數據主要是通過 Web API,所以凡是要保護這種對外的 API 時,都需要這樣授權的方式。而 OAuth 2.0 的這種頒發訪問令牌的機制,是再合適不過的方法了。同時,這樣的 Web API 還在持續增加,所以 OAuth 2.0 是目前 Web 上重要的安全手段之一。

基本規範

OAuth 2.0 的標準是 RFC 6749 文件。OAuth 引入了一個授權層,用來分離兩種不同的角色:客戶端和資源所有者。資源所有者同意以後,資源服務器可以向客戶端頒發令牌。客戶端通過令牌,去請求數據。也就是說,OAuth 的核心就是向第三方應用頒發令牌。

OAuth 標準應用規範

按照一般軟件系統開發定義開看,一個 OAuth 標準應用規範都有如下幾個定義規範,或者說基本角色:

  • Third-party /Client application:第三方應用端程序,一般系統平臺都稱“客戶端”(client)。代表資源擁有者訪問受保護資源的軟件,它使用OAuth 來獲取訪問權限。
  • HTTP service:HTTP服務提供商,一般系統平臺都簡稱“服務提供商”。
  • Resource Owner:資源所有者,一般系統平臺都稱“用戶”(user),即登錄用戶。是有權將訪問權限授權給客戶端的主體,在大多數情況下,資源擁有者是一個人,他使用客戶端軟件訪問受他控制的資源;
  • User Agent:用戶代理,一般系統平臺就是指瀏覽器。
  • Authorization server:認證服務器,即服務提供商專門用來處理認證的服務器。一個HTTP 服務器,它在OAuth 系統中充當中央組件。授權服務器對資源擁有者和客戶端進行身份認證,讓資源擁有者向客戶端授權、爲客戶端頒發令牌。某些授權服務器還會提供額外的功能,例如令牌內省、記憶授權決策
  • Resource server:資源服務器,即服務提供商存放用戶生成的資源的服務器。它與認證服務器,可以是同一臺服務器,也可以是不同的服務器。資源服務器能夠通過HTTP 服務器進行訪問,在訪問時需要OAuth 訪問令牌。受保護資源需要驗證收到的令牌,並決定是否響應以及如何響應請求。

這裏必須強調一點的是,這裏說的第三方,大多數指的是區別於當前應用系統的其他應用,包括不限於微信,QQ,新浪,抖音,今日頭條等等。按照正常的系統的應用來說,在所用系統之前,都會有一個類似於open-iam身份識別與訪問管理的系統的,至少來講都會有這麼一個系統組件的。這樣來說,這個IAM應用平臺在多產品業務線,甚至說是多租戶場景模式來說,這是一個系統底層架構的核心元組件,所有其他的業務應用系統,都是圍繞這個組件來進行整合和糅合其他的業務需求的,如圖所示:

應用舉例

其實不論在單體架構時代,還是分佈式(RPC)服務時代,以及眼花繚亂微服務時代,還是現在都在追捧的雲原生架構時代,授權和認證應用模塊在日常開發裏,基本上是一個框架的底層組件來構建和關聯第三方軟件以及其他應用的。互聯網中所有的受保護資源,幾乎都是以 Web API 的形式來提供訪問的。每次都是用訪問令牌而不是用戶名和密碼來請求用戶的數據,才大大減少了安全風險上的“攻擊面”,至少從系統架構層面來說,引入 OAuth 主要還是爲項目架構底層保駕護航。

版權聲明:本文爲博主原創文章,遵循相關版權協議,如若轉載或者分享請附上原文出處鏈接和鏈接來源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章