簡體   English   中英

asp.net core jwt 刷新令牌,無需保存任何地方

[英]asp.net core jwt refresh tokens without saving anywhere

我已經在 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 為您處理刷新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM