![](/img/trans.png)
[英]ASP.NET Core. How can i create an auth cookie without an identity user account?
[英]ASP.NET Core. How can I invalidate JWT-Token after password change
對不起,我的英語不好。 我正在使用 Vue.JS 為客戶端在 ASP.NET Core 中編寫應用程序。 對於身份驗證用戶,我使用 JWT 和 ASP.NET Identity。 我有一個更改密碼的方法。 但我不明白:如何在密碼更改后使令牌無效? 我希望在另一個瀏覽器中通過身份驗證的用戶將在此之后注銷。 有遇到這種問題的人嗎?
您通常不會使JWT無效,因為它們是短期訪問令牌,因此在更改密碼后,請求新令牌將提示用戶重新輸入憑據。
如果您確實需要在更改密碼后立即使JWT無效 - 您需要查看Introspection
,您的后端api實際上有一個反向通道到您的令牌發行者,然后它可以重新驗證每個請求的令牌。 這樣,如果您在發行方一方使令牌無效 - 它將立即反映在API方面。
我一直在考慮這個問題,無法使已經存在的 JWT 無效可能不會被內置到任何東西中,但這是可能的。
敘述如下:您安裝了一個可以通過網絡控制的警報系統,並且您的前 S/O 已登錄到您之前共享的帳戶。 他們心煩意亂,總是在隨機時間啟用警報。 如果 Web 應用程序使用 JWT 來存儲會話,您可以更改密碼,但您前任擁有的 JWT 仍然可以使用一段時間,直到超時。
假設您使用解決方案 3:
在為這個解決方案存儲 JWT 數據時,我傾向於不存儲整個 JWT,因為它開始時是相當大的文本。 或者,只需存儲 JWS(JWT 簽名),如果因任何原因被捕獲,這將使存儲的值更小且不可用。 接下來,它是一個哈希值,所以我們可以只存儲最后的 9 個值(9 個,因為 int32 最大值是 2147483647)。 我們只需要一點獨特性,並不多。 接下來,如果我們使用正則表達式從 JWS 中提取整數並再次取您遇到的前 9 個數字,我們可以避免字符串比較以驗證傳遞的 JWS 是活動的。
按照這種方法,回到敘述,如果您要注銷,您的用戶將被標記為已注銷,導致您和您的 S/O 都需要重新進行身份驗證。 (假設您已經更改了密碼,那么您就是黃金,否則是時候聯系客戶支持了)如果您要重新登錄,您將獲得一個新的 JWT,並且一個新的簽名將存儲在用戶表中。 如果您的 S/O 嘗試使用該站點,他們將無法通過舊的 JWT 進行身份驗證,並會被迫重新登錄。
權衡:如果我們只存儲 JWS,或者按照我的建議存儲其中的一部分,則多個用戶無法同時登錄同一個帳戶。 您對此的感受實際上取決於您的應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.