簡體   English   中英

登錄后的Angular JWT和用戶信息存儲

[英]Angular JWT and user info storage after login

在成功登錄后,如何在localstorage或cookie中保存除JWT之外的任何其他用戶信息? (用戶配置文件對象已經在jwt有效負載子部分中保存和加密。)在初始化angular中的任何其他內容之前,我需要准備用戶配置文件對象(用於獲取用戶角色,登錄狀態等)。

如果我在客戶端只保存JWT,那么在app加載之前我需要一個額外的ajax請求來從服務器端的JWT解碼獲取用戶信息,因為令牌秘密在服務器上(僅在完整頁面刷新之后)。 令牌有效或無效,因此在這種情況下處理錯誤要容易得多。

如果我將JWT和用戶配置文件對象保存為客戶端存儲中的字符串,那么這將是冗余的,用戶可以手動更改該對象和應用程序可能會關閉。

我更喜歡在成功登錄后僅在客戶端保存JWT存儲,但我需要一些建議,在這種情況下如何組織代碼? 完整頁面刷新后如何獲取用戶配置文件對象?

請幫忙。

最安全的解決方案是將JWT存儲在僅HTTPS的cookie中,然后請求服務器獲取用戶對象。

如果您想避免對服務器的額外呼叫,您需要獲得創意。 我正在嘗試的一種方法是將JWT的索賠主體存儲在客戶端 - 只是正文,簽名被排除在外。 排除簽名后,“令牌”不再是JWT,不能用於身份驗證,從而防止實際訪問令牌被盜出本地存儲。

然而,這個DOES假設有關索賠機構的兩件事:

1)信息不透明且不包含有關用戶的個人身份信息(PII)(本地存儲容易受到XSS攻擊)。

2)如果在本地存儲中修改了此對象,您的Angular應用程序不會向用戶泄漏敏感信息(您不應將敏感信息存儲在Angular應用程序中,它應受API保護)

3)與所有基於cookie的身份驗證策略一樣,您可以保護自己免受CSRF攻擊

我在Stormpath工作,最近我寫了一篇關於這個主題的博客文章: 基於令牌的單頁應用認證

希望這可以幫助!

為了簡單起見,我只存儲JWT並實現額外的ajax調用來獲取用戶配置文件。

但是如果您絕對想要避免這一次調用,您可以考慮使用非對稱簽名的JWT而不是加密的JWT,然后在客戶端提取數據,假設您控制JWT的創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM