亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

使用 C 撤銷 JWT#

使用 C 撤銷 JWT#

PHP
ITMISS 2022-09-04 16:33:41
我有一個自定義類,當用戶從服務器請求數據或任何內容時,我用它來使令牌失效Authorize但每當令牌過期時,原則仍然返回為 true,并且仍然調用控制器并獲取數據。IsAuthenticated我希望它做的是使令牌失效并顯式注銷用戶退出系統。我找不到任何有用的東西。如果需要,我可以提供JWT屬性/過濾器的代碼更新 1:令牌生成public static string GenerateToken(User user){    int expireMinutes;    try    {        expireMinutes = string.IsNullOrEmpty(ConfigurationManager.AppSettings["SessionTimeInMinutes"])            ? 30            : int.Parse(ConfigurationManager.AppSettings["SessionTimeInMinutes"]);    }    catch (Exception)    {        expireMinutes = 30;    }    var symmetricKey = Convert.FromBase64String(Secret);    var tokenHandler = new JwtSecurityTokenHandler();    var now = DateTime.Now;    var tokenDescriptor = new SecurityTokenDescriptor    {        Subject = new ClaimsIdentity(new[]        {            new Claim(ClaimTypes.Email, user.Email)            ,new Claim(ClaimTypes.Name, user.FirstName + " " + user.LastName)            ,new Claim("uid", user.Id.ToString())            ,new Claim("cid", user.ClientId.ToString())            ,new Claim("rid", string.Join(",", user.Roles.Select(r => r.RoleId).ToList()))        }),        Expires = now.AddMinutes(Convert.ToInt32(expireMinutes)),        IssuedAt = now,        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(symmetricKey), SecurityAlgorithms.HmacSha256Signature)    };    var stoken = tokenHandler.CreateToken(tokenDescriptor);    var token = tokenHandler.WriteToken(stoken);    return token;}
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

首先:JWT只是客戶端可以操作的客戶端令牌。這里沒有絕對的安全。JWT 由符號鍵保護,但不能自行失效。有效令牌在過期之前一直有效。這是JWT的一個缺陷(正如@TimBiegeleisen在評論中指出的那樣),令牌本身不能輕易失效。

如果用戶工作太久并被自動注銷,則您的JWT已過期,并且一切都很好。沒有麻煩,因為它自然耗盡,你沒有必要采取行動。

要使令牌失效,您需要使用 創建一個新令牌。這樣,下次您下次檢查JWT時,您看到它已過期。Expires = now.AddMinutes(-1)

用戶即使在注銷后也可以保存JWT并使用它的情況只能通過將JWT列入黑名單或偶爾維護某種其他類型的服務器端會話(這不起作用,即無狀態Web服務)來實現。

編輯:刪除了錯誤信息,并添加了使 JWT 失效(黑名單)的其他方法


查看完整回答
反對 回復 2022-09-04
?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

您可以簡單地兌現要撤銷的令牌,然后使您的身份驗證部分將已撤銷的請求與現金中的令牌進行比較,并基于該請求拒絕該請求

在代幣到期之前,現金應該知道代幣的重新開采時間,并兌現那么長時間


查看完整回答
反對 回復 2022-09-04
  • 2 回答
  • 0 關注
  • 158 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號