2016-05-12 306 views
5

我正在瀏覽Oauth2文檔,並認爲這是一種寬容的安全方式,因此我試圖通過特殊的方案來實現JWT令牌,如圖片中用於與Web API進行通信的移動應用程序。我不喜歡Oauth2刷新標記的想法,因爲它們可能會被盜取,並允許(由合法和惡意用戶)並行使用(除非您通過旋轉它們來實現盜竊檢測(在每次請求時刷新刷新標記),爲什麼使用他們呢?通過JWT進行應用程序認證和授權

的身份驗證流程,工作原理:

  1. 用戶與憑據登錄享有20分鐘的壽命的JWT。
  2. 過期後,通過點擊db檢查它是否被列入黑名單(relogin),如果不檢查它是否用於生成新的令牌,則會刷新jwt。
  3. 如果它從未用於刷新,則會被接受並用於發佈低級別訪問令牌。
  4. 如果令牌之前使用,或有不同的客戶端+設備+用戶超過其母公司提供了認證檢查(密碼或鎖屏密碼)
  5. 如果獲得通過,該檢查發出新的第一級令牌列入黑名單的所有父和db上的孩子,就像新的第一個用戶登錄一樣。
  6. 如果鎖定屏幕失敗,用戶將看到登錄屏幕。

的問題是:

  1. 什麼是可能的安全漏洞? (我發現了兩個用例:被盜的有效訪問令牌與Oauth令牌持續20分鐘相同,在這裏沒有任何損失,而且被盜的睡眠令牌:用戶沒有登錄說7天,令牌被盜用並被使用直到用戶再次登錄或令牌鏈在持續3個月後恢復 - 我們的政策 - 此盜竊的機會很小,因爲令牌必須在用戶在應用上發出的最後一個請求截獲,比偷取Oauth2更新令牌更苗條)
  2. 什麼是用戶體驗攻擊者可以在此計劃上針對應用程序引發問題?

jwt auth flow

回答

0

的OAuth2 refresh tokens並不意味着移動客戶端使用。使用刷新令牌需要客戶端憑據,這些憑據不能安全地存儲在移動應用程序中。

刷新令牌用於機密客戶端(例如服務器端Web應用程序)。它們在使用時經常更新(服務器發回新的訪問權限和新的刷新令牌)。與訪問令牌相比,刷新令牌僅發送給授權服務器,而不是資源(API)服務器。

關於您的認證流程。第2步是IMO的薄弱環節。您允許客戶端使用過期令牌來生成新的訪問令牌。因此,如果我找到您的手機並訪問設備,它將允許我獲取新的訪問令牌並冒充您。

您可以強制客戶端每15分鐘刷新一次令牌,但是您必須定義在應用程序關閉或設備關閉時會發生什麼情況?可以重新驗證用戶身份嗎?

+0

您的使用案例:被盜手機會讓惡意用戶抓住所有持久登錄應用程序並冒充你:facebook,google ....所以這個漏洞很常見,這就是爲什麼在這些應用程序儀表板上撤銷設備的原因。 –