我想允許我的應用程式的用戶匿名登錄(這將使用隨機生成的電子郵件和密碼為他們創建一個帳戶),如果他們想要創建一個永久帳戶,他們將能夠簡單地系結電子郵件和密碼。
我使用令牌、訪問和重繪 ,這意味著匿名用戶和經過身份驗證的用戶的常規令牌流是相同的。
匿名用戶的問題是,如果用戶長時間未登錄應用程式(大于重繪 令牌),這意味著現在重繪 令牌已過期且無效。
我怎么能處理這種情況?我不能像往常一樣要求他們重新進行身份驗證,因為他們不知道他們是憑據,而且我不能冒丟失用戶資料的風險。
我唯一能想到的就是嘗試使用本地首選項(例如 DataStore/SharedPreferences 與 KeyStore 相結合)通過加密來安全地保存他們的憑據,當這種情況發生時,我將簡單地重新登錄它們。但我不確定這是否足夠好。
任何建議都非常感謝!
uj5u.com熱心網友回復:
您想要實作的似乎是忽略 JWT 令牌的exp欄位。省略它或設定為數年后的值iat可以解決問題。
但這意味著您必須調整令牌獲取機制,并且它不會與匿名用戶和注冊用戶相同。
編輯
重繪 令牌在任何情況下都不是永遠有效的。您應該使用秘密(隨機生成的字串,對資料庫中的每個用戶都是唯一的)進行驗證。必須在每次更改密碼(通過應用程式或忘記密碼流)和每次“從所有設備注銷”操作時重新生成此機密。它用于獲取每個訪問令牌。
至于匿名身份驗證 - 在使用 JWT 令牌時,這不是標準方法。您不應將這些用戶視為經過身份驗證的用戶,而應限制他們對應用程式內容的訪問。通常,您會在客戶端上保留盡可能多的資訊,而不是將其存盤在服務器上。
我想說的是,你不能讓你的匿名用戶像經過身份驗證的用戶一樣安全,因為你只是通過不要求電子郵件和密碼來省略一個(也是最重要的)級別的保護。
訪問重繪 令牌幾乎與訪問用戶密碼相同。當密碼更改時 - 重繪 令牌也會更改。唯一的區別是重繪 令牌有一個到期日期。由于密碼未存盤在設備的任何位置,只有用戶知道,它實際上增加了一層額外的安全性 - 攻擊者將無法重新登錄,因為他不知道密碼。
問題是您想在設備上存盤憑據。這與存盤沒有過期的重繪 令牌相同,因為攻擊者可以從存盤中讀取憑據并永遠重新登錄。這才是重點。
您應該查看如何在 Android 中安全地存盤訪問令牌和機密?有關存盤令牌的一些資訊。
總而言之,我永遠不會擔心匿名用戶的安全性,并在設計系統時牢記這一點
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/334738.html
