前言
OAuth 1.0已經在IETF塵埃落定,編號是RFC5849
這也標誌著OAuth已經正式成為網際網路標準協定。
OAuth 2.0早已經開始討論和建立的草案。 OAuth 2.0很可能是下一代的“用戶驗證和授權”標準。現在百度開放平台,騰訊開放平台等大部分的開放平台都是使用的OAuth 2.0協定作為支撐。
OAuth(開放授權)是一個開放標準,允許用戶讓第三方套用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯繫人列表),而無需將用戶名和密碼提供給第三方套用。
OAuth
允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。每一個令牌授權一個特定的網站(例如,視頻編輯網站)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相冊中的視頻)。這樣,OAuth允許用戶授權第三方網站訪問他們存儲在另外的服務提供者上的信息,而不需要分享他們的訪問許可或他們數據的所有內容。
OAuth是OpenID的一個補充,但是完全不同的服務。
OAuth 2.0
是OAuth協定的下一版本,但不向後兼容OAuth 1.0。 OAuth 2.0關注客戶端開發者的簡易性,同時為Web套用,桌面套用和手機,和起居室設備提供專門的認證流程。2012年10月,OAuth 2.0協定正式發布為RFC 6749 。
Facebook的新的Graph API只支持OAuth 2.0,Google在2011年3月亦宣布Google API對OAuth 2.0的支持。
認證授權過程
在認證和授權的過程中涉及的三方包括:
1、 服務提供方,用戶使用服務提供方來存儲受保護的資源,如照片,視頻,聯繫人列表。
2、用戶,存放在服務提供方的受保護的資源的擁有者。
3、客戶端,要訪問服務提供方資源的第三方套用,通常是網站,如提供照片列印服務的網站。在認證過程之前,客戶端要向服務提供者申請客戶端標識。
使用OAuth進行認證和授權的過程如下所示:
用戶想操作存放在服務提供方的資源。
用戶登錄客戶端向服務提供方請求一個臨時令牌。
服務提供方驗證客戶端的身份後,授予一個臨時令牌。
客戶端獲得臨時令牌後,將用戶引導至服務提供方的授權頁面請求用戶授權。在這個過程中將臨時令牌和客戶端的回調連線傳送給服務提供方。
用戶在服務提供方的網頁上輸入用戶名和密碼,然後授權該客戶端訪問所請求的資源。
授權成功後,服務提供方引導用戶返回客戶端的網頁。
客戶端根據臨時令牌從服務提供方那裡獲取訪問令牌。
服務提供方根據臨時令牌和用戶的授權情況授予客戶端訪問令牌。
客戶端使用獲取的訪問令牌訪問存放在服務提供方上的受保護的資源。
簡單歷史回顧
OAuth 1.0在2007年的12月底發布並迅速成為工業標準。
2008年6月,發布了OAuth 1.0 Revision A,這是個稍作修改的修訂版本,主要修正一個安全方面的漏洞。
2010年四月,OAuth 1.0的終於在IETF發布了,協定編號RFC 5849。
OAuth 2.0的草案是在2011年5月初在IETF發布的。
OAuth is a security protocol that enables users to grant third-party access to their web resources without sharing their passwords.
OAuth是個安全相關的協定,作用在於,使用戶授權第三方的應用程式訪問用戶的web資源,並且不需要向第三方應用程式透露自己的密碼。
OAuth 2.0是個全新的協定,並且不對之前的版本做向後兼容,然而,OAuth 2.0保留了與之前版本OAuth相同的整體架構。
這個草案是圍繞著 OAuth2.0的需求和目標,歷經了長達一年的討論,討論的參與者來自業界的各個知名公司,包括Yahoo!, Facebook, Salesforce, Microsoft, Twitter, Deutsche Telekom, Intuit, Mozilla, and Google。
OAuth 2.0的新特性:
6種全新流程
User-Agent Flow – 客戶端運行於用戶代理內(典型如web瀏覽器)。
Web Server Flow – 客戶端是web伺服器程式的一部分,通過http request接入,這是OAuth 1.0提供的流程的簡化版本。
Device Flow – 適用於客戶端在受限設備上執行操作,但是終端用戶單獨接入另一台電腦或者設備的瀏覽器
Username and Password Flow – 這個流程的套用場景是,用戶信任客戶端處理身份憑據,但是仍然不希望客戶端儲存他們的用戶名和密碼,這個流程僅在用戶高度信任客戶端時才適用。
Client Credentials Flow – 客戶端適用它的身份憑據去獲取access token,這個流程支持2-legged OAuth的場景。
Assertion Flow – 客戶端用assertion去換取access token,比如SAML assertion。
可以通過使用以上的多種流程實現Native應用程式對OAuth的支持(程式運行於桌面作業系統或移動設備)
application support (applications running on a desktop or mobile device) can be implemented using many of the flows above.
持信人token
OAuth 2.0 提供一種無需加密的認證方式,此方式是基於現存的cookie驗證架構,token本身將自己作為secret,通過HTTPS傳送,從而替換了通過 HMAC和token secret加密並傳送的方式,這將允許使用cURL發起APIcall和其他簡單的腳本工具而不需遵循原先的request方式並進行簽名。
簽名簡化:
對於簽名的支持,簽名機制大大簡化,不需要特殊的解析處理,編碼,和對參數進行排序。使用一個secret替代原先的兩個secret。
短期token和長效的身份憑據
原先的OAuth,會發行一個 有效期非常長的token(典型的是一年有效期或者無有效期限制),在OAuth 2.0中,server將發行一個短有效期的access token和長生命期的refresh token。這將允許客戶端無需用戶再次操作而獲取一個新的access token,並且也限制了access token的有效期。
角色分開
OAuth 2.0將分為兩個角色:
Authorization server負責獲取用戶的授權並且發布token。
Resource負責處理API calls。