2016-08-30 52 views
0

這裏是我的項目結構是什麼樣子註銷一個無狀態的應用

  • UI:AngularJS應用
  • 後端:Java的+ MongoDB的無狀態的應用

的UI認證給定用戶和REST api使用JWT令牌進行響應。對於每個後續請求,REST api都會在標頭中使用令牌,如果不存在,它將返回Unautorized錯誤。

現在,實施logoff功能的最佳方法是什麼?有一點很清楚,我將從UI cookie中刪除令牌。但我需要告訴服務器用戶已註銷。

我正在考慮維護一個內存數據庫以跟蹤登錄的用戶,並在用戶退出後從內存中刪除用戶,但它會使應用程序處於某種有狀態(我猜)。另外,擴展應用程序可能會變得很複雜,因爲我不得不跨所有節點複製內存中的用戶。

對於每個REST調用,我從MongoDB獲取用戶詳細信息。使用數據庫來存儲登錄狀態是否有意義?我只是在大聲思考。因爲我不知道該走什麼方向。

+0

*「但我需要告訴服務器用戶已註銷。」*爲什麼?無論如何,只需製作一個註銷端點即可從後端刪除令牌。 –

+0

*爲什麼*以便服務器知道任何後續請求都需要登錄憑證。正如我所提到的,如果我不這樣做,令牌已被某人盜用,即使客戶端已被註銷,它們也可以繼續發送請求。 *只是註銷終點*會引起我在第二部分提到的問題,即可擴展性問題。 –

+0

我認爲在您的數據庫中存儲登錄狀態和從數據庫中刪除已失效的令牌之間沒有任何性能差異 –

回答

1

如果您使用JWT維護客戶端會話,那麼服務器應該沒有登錄和註銷用戶的概念。

這是您決定使用智威湯遜支付的價格(當然,這取決於您對應用程序的風險偏好)。

如果您希望將用戶登錄到服務器端,那麼您應該取消JWT模型並記錄服務器端的會話。這樣,您可以刪除服務器端記錄以及註銷時的cookie。

相關問題