一、什麼是oauth?
oauth是乙個授權規範,可以使a應用在受限的情況下訪問b應用中使用者的資源(前提是經過了該使用者的授權,而a應用並不需要也無法知道使用者在b應用中的賬號和密碼),資源通常以rest api的方式暴露。
二、什麼是oauth2.0?
有2.0自然有1.0,相比1.0,2.0有如下不同:
三、為什麼要用oauth?
傳統的client-server 認證模式下,客戶端一般通過資源所有者的賬號/密碼,來向服務端請求某個受保護的資源。那麼,為了能讓第三方應用訪問這些受保護的資源,資源所有者可能需要與第三方應用共享自己的賬號/密碼,但是這麼做存在一些問題:
oauth 可以解決這些問題,方法是引入乙個授權層,並且將客戶端與資源所有者的角色分離。oauth下,客戶端可以訪問哪些資源受資源所有者控制,並且客戶端的訪問憑證與資源所有者是不同的。客戶端不再使用資源所有者的憑證訪問受保護的資源,而是通過獲取乙個access token(乙個字串,能夠表 示訪問的邊界,訪問的期限等訪問屬性)。在經過使用者授權後,access token會由乙個授權伺服器發布給第三方客戶端。然後,第三方客戶端使用access token到資源伺服器訪問受保護的資源。
四、進一步理解oauth2.0
1、oauth中涉及的幾個角色:
2、協議流示意圖
3、該協議流是總體概念,實際會根據使用的授權許可的型別不同而有所差異,oauth2.0有4種授權許可型別:
授權碼從授權伺服器獲得,授權伺服器充當client和resource owner的中間者。client不會直接從resource owner請求授權,而是引導resource owner到授權伺服器,授權伺服器會反向引導resource owner至client,並帶上授權碼。返回授權碼之前,由授權伺服器驗證resource owner的身份以及授權情況,因為resourceowner只會在授權伺服器做認證,resource owner的憑證資訊是不會讓client知曉的。授權碼在安全方面帶來了一些重要的好處,比如對客戶端認證的能力,以及避免了直接通過resource owner的user-agent(比如瀏覽器)來傳輸access token,使得access token對其他人不可見,包括resource owner自己,大大降低了access token洩露的風險。
直接使用資源所有者的密碼憑證(比如:使用者名稱和密碼)作為授權許可來獲取access token。該型別下雖然client知曉了resource owner的憑證,但是可以通過換取乙個長生命週期的access token或 refresh token 來避免長期儲存憑證以便將來再次使用的需要。但是除非client是被高度受信任的,並且授權碼型別不能使用的場景外不建議使用。
客戶端憑證(或其它的認證形式)可以直接用作授權許可。適用於授權邊界不需要resource owner控制或者能夠在授權伺服器預先配置的場景,比如在多個資源伺服器共用統一使用者中心的場景下,資源伺服器之間需要相互訪問,此時client可能也是resource owner 或者resource server。
五、如何實現oauth2.0?
開源界有很多基於各種語言實現的oauth2.0的框架,我們可以根據自身的需要選擇符合自己要求的框架,但是很有可能分析下來,我們會發現有些語言領域的oauth2.0框架並不能滿足實際的需求。
筆者曾花費一些時間自研了一套oauth2.0的框架,目前只包含oauth2.0的授權碼許可型別,支援聯合登入和單點登入,擁有完整的統一使用者中心體系,支援使用者登入認證層和快取層的自定義。其詳細的時序圖如下:
聯合登入時序圖:
單點登入時序圖:
ok,本篇就這麼多內容啦~,感謝閱讀o(∩_∩)o。
oAuth 2 0協議解析
部落格 完整的oauth 2.0協議流包括4個主體,6個步驟。4個主體分別是 資源擁有者 可以是人,負責授權工作。對open api來說,即發布方。發布方審批呼叫者的申請,通過後,即完成授權,體現為資料庫中的記錄。客戶端 一般是第三方應用程式。對於open api來說,即呼叫者。授權伺服器 負責完成...
OAuth 2 0系列教程
作者 jakob jenkov譯者 林浩校對 郭蕾 oauth是openid的乙個補充,但是完全不同的服務。oauth 2.0 是目前比較流行的做法,它率先被google,yahoo,microsoft,facebook等使用。之所以標註為 2.0,是因為最初有乙個1.0協議,但這個1.0協議被弄得...
OAuth 2 0協議原理
oauth oauth 開放授權 是乙個開放標準,允許使用者授權第三方移動應用訪問他們儲存在另外的服務提供者上的資訊,而不需要將使用者名稱和密碼提供給第三方移動應用或分享他們資料的所有內容。oauth 2.0中最關鍵的步驟在於使用者授權這一步。使用者授權有四種模式 授權碼模式 authorizati...