Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net core jwt刷新令牌而不保存任何位置_Asp.net_Jwt_Core_Refresh Token - Fatal编程技术网

asp.net core jwt刷新令牌而不保存任何位置

asp.net core jwt刷新令牌而不保存任何位置,asp.net,jwt,core,refresh-token,Asp.net,Jwt,Core,Refresh Token,我已经在asp.net框架中实现了刷新令牌,如下所示。它不需要将刷新令牌保存到任何位置。我可以在asp.net核心jwt令牌中执行同样的操作吗。我想要的不是将刷新令牌保存在DB或其他任何地方 public class RefreshTokenProvider : IAuthenticationTokenProvider { public async Task CreateAsync(AuthenticationTokenCreateContext context) {

我已经在asp.net框架中实现了刷新令牌,如下所示。它不需要将刷新令牌保存到任何位置。我可以在asp.net核心jwt令牌中执行同样的操作吗。我想要的不是将刷新令牌保存在DB或其他任何地方

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);
    }
}
公共类RefreshTokenProvider:IAAuthenticationTokenProvider
{
公共异步任务CreateSync(AuthenticationTokenCreateContext上下文)
{
创建(上下文);
}
公共异步任务ReceiveAsync(AuthenticationTokenReceiveContext上下文)
{
接收(上下文);
}
公共void创建(AuthenticationTokenCreateContext上下文)
{
对象输入;
context.OwinContext.Environment.TryGetValue(“Microsoft.Owin.Form#collection”,输出输入);
var grantType=((FormCollection)输入)?.GetValues(“grant_类型”);
var grant=grantType.FirstOrDefault();
if(grant==null | | grant.Equals(“刷新令牌”))返回;
context.Ticket.Properties.ExpiresUtc=DateTime.UtcNow.AddDays(Constants.refreshTokenExpireyInDays);
SetToken(context.SerializeTicket());
}
public void Receive(AuthenticationTokenReceiveContext上下文)
{
DeserializeTicket(context.Token);
if(context.Ticket==null)
{
context.Response.StatusCode=400;
context.Response.ContentType=“应用程序/json”;
context.Response.ReasonPhrase=“无效令牌”;
回来
}

如果(context.Ticket.Properties.ExpiresUtcJWT令牌在使用JWT中间件时自动刷新,并保存在内存中。据我所知,您不需要编写任何代码。只需将JWT设置为服务。如果JWT令牌是从客户端发送的,它将在服务器端刷新


JWT令牌信息存储在内存中,而不是存储在任何类型的数据库中。毕竟,你必须知道接受什么令牌和拒绝什么令牌,因为不可能不在任何地方存储任何东西。你不需要单独的令牌。只需JWT为你处理刷新。

你能为我提供一个链接或代码示例吗?它只发送了auth-tokn不刷新令牌是,因为不需要刷新令牌,因为它会自动刷新令牌。与您在接收函数上执行的操作相同。当用户使用令牌发出请求时,令牌将自动验证和刷新。