第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

停止刷新令牌的比賽條件?

停止刷新令牌的比賽條件?

瀟湘沐 2021-05-04 12:20:16
我有一個reactjs網(wǎng)站和asp.net核心后端,并且刷新令牌有問題。當有人登錄到我的網(wǎng)站時,他們將獲得訪問令牌和刷新令牌(相當標準)。現(xiàn)在,我設置了一個比訪問令牌的時間短的計時器。當他們有多個選項卡打開時,所有這些都很好用。問題在于它們都共享本地存儲(需要自動登錄,因此不能使用會話存儲)設想2個標簽頁一個接一個地打開。在訪問令牌死亡之前2分鐘設置2個計時器。第一次觸發(fā)時會先發(fā)送刷新令牌到服務器,然后帶回新的刷新/訪問令牌。在服務器上,發(fā)送的刷新令牌將被刪除。第2個計時器會在第一個計時器后不久(第一個計時器正在工作時)觸發(fā),但現(xiàn)在很有可能已刪除刷新令牌,從而使該請求無效。如何停止這種比賽狀態(tài)?var foundRefreshToken = dbContext.Tokens.FirstOrDefault(x => x.Value == refreshToken);if (foundRefreshToken == null){    return null;}var newRefreshToken = CreateRefreshToken(foundRefreshToken.ClientId, foundEmployee.Id);dbContext.Tokens.Remove(foundRefreshToken);dbContext.Tokens.Add(newRefreshToken);dbContext.SaveChanges();private Token CreateRefreshToken(string clientId, string userId)    {        return new Token()        {            ClientId = clientId,            EmployeeId = userId,            Value = GenerateRefreshToken(),            CreatedDate = DateTime.UtcNow        };    }// high level js  refreshTimer;  setRefreshTimer(intervals) {    this.clearRefreshTimer();    this.refreshTimer = setInterval(() => {      this.refreshAuthentication();    }, intervals);  }我能想到的僅有兩件事是不要刪除刷新令牌(但這會導致自動登錄出現(xiàn)問題)或者我在本地存儲中有一個“鎖定”第一個選項卡以執(zhí)行刷新的標記,而其他標記則等待查看是否執(zhí)行該操作(猜測需要另一個計時器)。如果不是,則嘗試下一個。還有其他想法嗎?
查看完整描述

2 回答

?
素胚勾勒不出你

TA貢獻1827條經(jīng)驗 獲得超9個贊

當您創(chuàng)建令牌和刷新令牌時,兩者都應具有一個到期日期,例如:


return new Token()

        {

            ClientId = clientId,

            EmployeeId = userId,

            Value = GenerateRefreshToken(),

            CreatedDate = DateTime.UtcNow,

            ExpirationDate = <you decide>

        };

在每個請求上,您都應該通過比較日期來檢查令牌是否過期。如果已過期,則可以使用保持用戶身份驗證。最終,您甚至無法使刷新令牌過期,因為它必須由您的應用程序安全地存儲。


刷新令牌和短期令牌背后的想法是,如果令牌被泄露,黑客只需要說10分鐘,他就需要refresh_token來生成一個新令牌。


查看完整回答
反對 回復 2021-05-27
?
慕姐8265434

TA貢獻1813條經(jīng)驗 獲得超2個贊

最佳實踐要求刷新令牌只能使用一次,并且每次使用新令牌時都應該發(fā)行一個。再次嘗試使用舊的令牌應視為被盜令牌-該用戶的所有未使用令牌均應失效,并且任何新的訪問嘗試均需要完整登錄。

當兩個會話共享一個公共的刷新令牌時(例如,當在瀏覽器中打開兩個選項卡并且該令牌存儲在僅HTTP的cookie中時),就會發(fā)生競爭狀態(tài)。當出現(xiàn)兩個會話使用相同的刷新令牌同時嘗試刷新的情況時,服務器的第一個會話將獲得有效的新令牌,但是第二個會話發(fā)現(xiàn)其令牌現(xiàn)在無效并被注銷。

如OP所述,可以使用諸如忙碌標志之類的機制在前端解決此問題,以便必須先完成第一次刷新,然后才能進行第二次刷新。

在后端,您可以使用一種機制,允許刷新令牌在完全失效或刪除之前的很短時間內(nèi)(僅幾秒鐘)被重用。


查看完整回答
反對 回復 2021-05-27
  • 2 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號