環信大學 了解OAuth2 0

2021-10-11 16:15:47 字數 3320 閱讀 1389

oauth 2.0是一種認證授權工業標準,為多種應用(web、桌面程式、手機、只能裝置等)提供簡單易安全的認證授權方法。 

安全問題,離不開信任關係:

舉個例子,我們都知道銀行卡的密碼可以在櫃員機輸入。這是因為我們信任櫃員機。

再舉個例子,你去便利店買東西,用手機支付時,都會提示你輸入密碼。因為支付服務信任的是你,而不是你的手機。

我們從角色和授權流程兩個方面入手,來看看oauth 2.0。

resource owner

resource owner是指資源的屬主,一般是終端使用者,有時候也可以是一台機器。比如你把錢存進銀行,錢就是resource,而你就是resource owner

resource server

resource server是指資源的託管者,其需要保證資源的安全性。你的銀行就是resource server

client

client指需要使用資源的應用,比如你的支付軟體就是client

authorization server

authorization server指負責認證resource owner身份和授權的實體。比如,你的銀行就是authorization server

oauth 2.0的角色劃分明確了resource ownerclient的角色分離,有助於清晰定義信任關係。

角色之間的信任關係,取決於使用的授權流程。

我們稱這個授權流程為密碼授權。

⚠️ 這個流程中,密碼直接交給client,有可能被洩漏,(密碼洩漏。 因此,需要注意採用安全的傳輸方式,不使用明文傳輸密碼,列印日誌時進行脫敏等措施。

密碼授權僅適用於不能使用其他授權的時候(比如不支援重定向)。

為了與密碼區分,我們稱其為機要授權流程。其中的client credentials是在服務提供商處購買服務時,由服務提供商提供的。 一般是指client idclient secret

client credentials是機密資訊需要安全儲存,因此該流程一般常見於伺服器使用。此時,伺服器既是resource owner又是client

⚠️ 其安全問題與密碼認證類似。由於伺服器是在受控的環境執行,相比密碼授權安全一些,但也需要注意,比如不要將機密資訊明文的寫到配置檔案中,可以採用環境變數或加密等方式。如果萬一洩漏了,應當立即重置。另外,有工具可以幫助檢查洩漏,比如:

我們稱其為授權碼授權流程。這個流程沒有直接把密碼交給client,因此避免密碼暴露給第三方client。

⚠️ 由於code是通過url傳遞的,會在referrer頭或其他方式被洩漏。rfc 6819。

oauth安全實踐草案16 給出了一些反制措施:

由於在授權過程中沒有驗證client,我們稱其為隱式授權。隱式授權本意是為了減少client與authorization server的互動次數,但由於其安全問題沒有好的對策,已經被認為是禁止使用的。應當使用授權碼授權。

⚠️ 隱式授權會造成access token洩漏,並且由於authentication server沒有驗證client,無法限制access token應用範圍(sender-constrained access tokens)。所以,隱式授權是禁止使用的。

另外,為了支援互動受限裝置,後續又增加了乙個device authorization grant,本文就不介紹了。

總結一下,oauth 2.0 這4種授權流程在信任關係方面採取的手段:

信任關係

密碼授權

機要授權

授權碼授權

隱式授權

ro信任c使用者

管理員使用者

使用者c信任ashttpshttpshttpshttps

as信任cclient credentialsclient credentialsclient credentials+pkce+檢查重定向位址

n/ac信任rshttpshttpshttps+statehttps+state

rs信任caccess tokenaccess tokenaccess tokenn/a

安全問題是一場持續進行的競賽,沒有一勞永逸的方案。並且,人的安全意識也非常重要,技術和機器無法解決全部問題。

附上笑話一枚:

環信ReactNative Demo執行

環信終於發布了reactnative版本的demo 那麼問題來了,reactnative新手如何執行demo原始碼呢?如果之前沒有安裝過reactnative環境的,執行 npm run newclear命令肯定會報錯,這裡介紹下如何從0開始執行reactnative demo原始碼。首先安裝bre...

python對接環信

class accountsync object def init self 環信 self.client id xx self.client secret xx 環信token def get admin token self,client id,client secret body respon...

即時聊天 環信

這一步把匯入檔案倒入到專案檔案中,記得要勾選上copy items if needed 噢!點選buide phases中的link binary with libraries 這一步真機和模擬器執行結果是不一樣的,要看清楚 5 真機錯誤修復 同第二步一樣,別忘記勾選 註冊都不用說了吧,使用的話可以...