asp.net-core - jwt 刷新令牌而不保存任何地方
问题描述
我已经在 ASP.NET 框架中实现了刷新令牌,如下所示。它不需要将刷新令牌保存在任何地方。我可以在 ASP.NET Core JWT 中做同样的事情吗?我想要的不是将刷新令牌保存在数据库或其他任何地方。
public class RefreshTokenProvider : IAuthenticationTokenProvider
{
public async Task CreateAsync(AuthenticationTokenCreateContext context)
{
Create(context);
}
public async Task ReceiveAsync(AuthenticationTokenReceiveContext context)
{
Receive(context);
}
public void Create(AuthenticationTokenCreateContext context)
{
object inputs;
context.OwinContext.Environment.TryGetValue("Microsoft.Owin.Form#collection", out inputs);
var grantType = ((FormCollection)inputs)?.GetValues("grant_type");
var grant = grantType.FirstOrDefault();
if (grant == null || grant.Equals("refresh_token")) return;
context.Ticket.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(Constants.RefreshTokenExpiryInDays);
context.SetToken(context.SerializeTicket());
}
public void Receive(AuthenticationTokenReceiveContext context)
{
context.DeserializeTicket(context.Token);
if (context.Ticket == null)
{
context.Response.StatusCode = 400;
context.Response.ContentType = "application/json";
context.Response.ReasonPhrase = "invalid token";
return;
}
if (context.Ticket.Properties.ExpiresUtc <= DateTime.UtcNow)
{
context.Response.StatusCode = 401;
context.Response.ContentType = "application/json";
context.Response.ReasonPhrase = "unauthorized";
return;
}
context.Ticket.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(Constants.RefreshTokenExpiryInDays);
context.SetTicket(context.Ticket);
}
}
解决方案
JWT 令牌在使用 JWT 中间件时会自动刷新,并保存在内存中。据我了解,您不需要编写任何类型的代码。只需将 jwt 设置为服务即可。如果从客户端发送 JWT 令牌,它将在服务器端刷新。
JWT 令牌信息存储在内存中,而不是任何类型的数据库中。毕竟,您必须知道接受哪些令牌以及拒绝哪些令牌,因为不可能不在任何地方存储任何东西。您不需要单独的令牌。只需 JWT 为您处理刷新。
推荐阅读
- apache - 通过 Certbot 在 Debian 上使用 SSL 的 Apache:如何为特定子文件夹添加配置设置?
- python-3.x - 如何在 Python 中打开系统日志文件
- c# - 如何将角色旋转到相机的旋转?
- flutter - Flutter:如何通过 dart Code 获取我的 Flutter 应用程序中所有小部件对象的所有属性以在测试中使用它?
- r - R在读/写CSV时失去小数点的精度?
- c++ - 使用变量错误打开输入和输出的 C++ 问题
- java - Maven + AspectJ + TestNG + Selenium
- autodesk-forge - AutoCAD.PlotToPDF+prod 生成的 PDF 中缺少最后一页
- docker - docker compose network 不服务来自主机的请求
- spring - 更改 VS Code 调试控制台字体颜色?