OAuth2訪問令牌不必過期(或者確實如此,但可能需要很多年)。
訪問令牌可以用於從資源服務器獲取某些資源,特別是它允許獲取用戶批准的資源。刷新令牌另一方面允許重複訪問。因此,人們不能廢除刷新令牌,而不需要每次訪問之間的用戶交互。
一般來說,令牌有時可能被相同設備上的其他惡意應用程序或手機上的MITM攻擊所盜用。如果可以讓手機信任狡猾的證書,SSL就可以使用MITM。公司有時需要訪問內部網絡(他們要求接受一個自簽名證書,這允許他們通過公司網絡發生MITM所有加密流量,因此假設發送令牌加密意味着他們不會在途中被盜。危險的,
無限制令牌本身並不弱於任何其他形式的令牌本質,如一堆論文(包括我自己的一篇文章中所證明的那樣,當我可以將其挖掘出來時,我會發布該鏈接)。然而,無記名代幣只適用於他們所作的假設是有效的假設,令牌可以保密是一般承載代幣的主要假設,如果不是這樣,則承載令牌不會聲明任何安全屬性(儘管有些仍然成立),見NIST Level 3 tokens,它定義了持票人令牌必須擊敗什麼攻擊,如s在OAuth Bearer Tokens中特化。短承載令牌不應該打敗令牌的盜竊行爲。
無法撤銷無記名令牌,這是真的。然而,鑑於通常的訪問模式是在獲取後立即使用訪問令牌,因此即使當前無法考慮濫用案例,也應儘快終止訪問令牌以防止潛在的濫用。令牌越長,它被盜的可能性就越大。刷新令牌實際上更加危險,因爲如果您無法保護客戶端ID,它會在更長的時間框架內提供重複訪問。一般而言,OAuth2可以提供對資源的訪問,因此可以用於向客戶端公開一段時間的API。使用刷新令牌可以完成更多的損害,而不是單個使用令牌。
客戶端身份驗證實際上可以通過多種方式更安全,例如,爲每個客戶端下載不同的密鑰。這可以防止在一臺設備上對令牌進行反向工程設計,破壞客戶端所有實例的安全性的廣泛攻擊。其他潛在的技術包括使用OAuth驗證客戶端與您的服務器,然後使用您希望訪問的授權服務器執行第二次OAuth協議運行。然後,您可以讓客戶定期更新密鑰,併爲他們提供不同的密鑰,同時不會給Facebook或Google所擁有的授權服務器所使用的系統帶來不必要的負擔。
使用移動應用程序時,即使沒有采取措施來保護客戶端,長壽命刷新令牌也比擁有某種多用途持票者令牌更安全。這是因爲用戶不能過期令牌。如果刷新令牌沒有被盜用,並且用戶僅僅希望撤銷訪問,那麼這可以完成。即使用戶僅希望撤銷訪問權限,也不能撤消多用途持票人令牌。一個多用途的數據庫引用令牌顯然可以被撤消,但這不是該協議的設計目的,因此在OAuth上執行的安全分析並沒有說明這個混合系統的安全性。
總之,我會建議使用刷新令牌和數據庫令牌,因爲這是最可能安全的。如果你能做任何事情來保護客戶,這是一個獎金,但這種保護的情況是微乎其微的。如果你確實想要保護客戶端的話,可以考慮使用軟標記,一個la google authenticator,因爲這是一個堅實的實現,經得起一些非常聰明的人的分析。
「在發放代幣後,Google可以決定是否由開發者授權應用程序以他的名義申請代幣。」他們如何做到這一點? Android操作系統是否位於應用程序和網絡之間,是否證明應用程序已正確簽名? – Thilo 2012-07-19 04:53:03
在Android上,您可以使用['AccountManager'](https://developer.android.com/reference/android/accounts/AccountManager.html)類來處理令牌和授權,Google的服務已經內置在那裏。我不認爲他們已經在使用應用程序簽名檢查,而是使用客戶端憑證方法。簽名檢查是在[Yaniv Inbar的Google I/O 2012談話](http://www.youtube.com/watch?v=dylFNrvZ_3U)中公佈的,有趣的部分是[10:41](http:///www.youtube.com/watch?v=dylFNrvZ_3U&hd=1&t=10m41s)。 – 2012-07-19 10:24:47
該項目名爲[Google Play服務](https://developers.google.com/android/google-play-services/)。 – 2012-07-19 10:28:54