2017-08-08 83 views
0

我們的應用程序中有一項要求: 當用戶更改其密碼時,應重新設置所有其他設備或計算機的其他登錄名已認證(除當前用戶的會話)。如何在使用Jersey和OAuth2更改密碼時撤銷用戶的所有令牌

我在下面看到(下面提供的鏈接和引用的段落是相關的),並得到了這樣的想法:撤銷用戶的所有令牌。
但不知道如何實現這一點(撤銷所有的令牌)。我們正在使用Jersey和OAuth2。 撤銷令牌意味着從會話和cookie中刪除現有的訪問令牌/刷新令牌。那麼換成新的令牌?

感謝

Best practice for REST token-based authentication with JAX-RS and Jersey

[與JAX-RS新澤西州的REST基於令牌的認證和最佳實踐]使用撤銷憑證與智威湯遜

如果你想撤銷令牌,你必須保持他們的軌道。您不需要在服務器端存儲整個令牌,只存儲 令牌標識符(必須是唯一的)和一些元數據(如果需要)。 對於令牌標識符,您可以使用UUID。

應該使用jti聲明將標記標識符存儲在 標記中。在驗證令牌時,通過檢查您在服務器端的令牌標識符 上的jti聲明值,確保它未被吊銷 。

出於安全考慮,當用戶更改其密碼時撤銷所有令牌。

回答

1

一般來說(不僅是澤西島),你必須在更改密碼時使用戶生成的所有令牌無效。

但不知道如何實現這個(撤銷所有標記)

這意味着,你必須expire在該用戶的OAuth的服務器數據庫中的每個發出的令牌:

  • 關係數據庫:批量更新。
  • noSQL:單個刪除引用。
  • Redis或類似的驅逐力量。

撤銷令牌是指從會話和cookie中刪除現有的訪問令牌/刷新令牌。那麼換成新的令牌?

排序的,撤銷方式:

  • 到期(不necesary刪除)從數據庫中的所有發佈的令牌。
  • 會話和cookie必須意識到這一點,並在檢測到它時將其刪除或標記爲過期(通常是一個棘手的部分)。

然後換成新的令牌?

在大多數情況下,在此之後,當用戶想要訪問受保護的資源,你的安全過濾器/層必須:

  • 通過的oauth2服務器(重認證重定向到登錄頁面部分)。
  • 或返回access_denied錯誤(在服務API的情況下)
相關問題