身份验证 – 我们可以在Asp.NET Core中销毁/无效JWT令牌吗?
我使用ASP.NET Core& ASP.NET核心标识生成JWT标记.
在客户端,我的react(SPA)app调用API来创建令牌,然后在子请求中包含Authorization:Bearer tokenFromApi. 当我想注销时如何立即使服务器端的令牌过期? 目前我只删除客户端的熊牌,而不包含在下一个请求中? 参考:https://blogs.msdn.microsoft.com/webdev/2017/04/06/jwt-validation-and-authorization-in-asp-net-core/ Startup.cs中的Configure部分中的代码 app.UseJwtBearerAuthentication(new JwtBearerOptions { AutomaticAuthenticate = true,AutomaticChallenge = true,TokenValidationParameters = new TokenValidationParameters { ValidIssuer = "MySite",ValidAudience = "MySite",ValidateIssuerSigningKey = true,IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("VERYL0NGKEYV@LUETH@TISSECURE")),ValidateLifetime = true } }); 用于创建令牌的API [HttpPost("Token")] public async Task<IActionResult> CreateToken([FromBody] LoginModel model) { try { var user = await userManager.FindByNameAsync(model.Email); if (passwordHasher.VerifyHashedPassword(user,user.PasswordHash,model.Password) == PasswordVerificationResult.Success) { var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub,user.UserName),new Claim(JwtRegisteredClaimNames.Jti,Guid.NewGuid().ToString()),new Claim(JwtRegisteredClaimNames.Email,user.Email) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("VERYL0NGKEYV@LUETH@TISSECURE")); var creds = new SigningCredentials(key,SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( "MySite","MySite",claims,expires: DateTime.UtcNow.AddMinutes(45),signingCredentials: creds); return Ok(new { Token = new JwtSecurityTokenHandler().WriteToken(token),Expiration = token.ValidTo,}); } return BadRequest(); } catch (Exception ex) { logger.LogError(ex.ToString()); return StatusCode((int)HttpStatusCode.InternalServerError); } } 解决方法
你不能轻易地让它过期,不会失去它的一些优点或使解决方案显着更复杂.
最好的办法是使访问令牌时间足够短(< = 5分钟)并且刷新令牌长时间运行. 但如果你真的想立即使它失效,你需要一些东西: 其他不需要消息总线/可分发缓存的解决方案需要在每个请求上联系auth服务器,从而破坏了JWT令牌的主要优势. JWT的主要优点是它们是自包含的,并且Web服务不必调用另一个服务来验证它.它可以通过验证签名在本地进行验证(因为用户无法更改令牌,无法使签名无效)以及令牌所针对的到期时间/受众. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- AspNet MVC中各种上下文理解
- asp.net – GET与POST真的很重要吗?
- asp.net-core – .net core(csproj)global.json’projects’
- asp.net mvc 中 一种简单的 URL 重写
- Block内的ASP.NET服务器端注释
- asp.net – 所有PartialView的自定义ActionResult等效模型
- asp.net-mvc – 发布具有多个部分视图的表单
- 在ASP.NET MVC4 Web应用程序上,w3wp的CPU使用率上升到100%
- asp.net-mvc-3 – MVC 3 – Html.EditorFor似乎缓存旧值$.a
- asp.net-mvc – MVC很容易让经典的ASP人学习
- 如何让OleDb在asp.net核心项目中阅读excel
- asp.net-mvc – Visual Studio总是能够在源代码视
- asp.net-web-api – mvc webapi cross domain po
- asp.net – 如何显示更好的错误:“从客户端检测
- 会话状态信息无效,可能在ASP.Net中已损坏
- 保持ASP.Net Session活跃的最佳方法
- asp.net-mvc – 更改ASP.NET MVC 3中的默认Model
- 是否可以首先为ASP.Net或ASP.Net MVC站点创建HTM
- 通过几个Hello World感受.NET Core全新的开发体验
- 我应该学习不了解MVC 1或2的asp.NET MVC 3吗?