为了账号安全,请及时绑定邮箱和手机立即绑定

使用 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 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号