d_sms_service/APT.Utility/Providers/OpenRefreshTokenProvider.cs
2024-10-28 13:45:58 +08:00

36 lines
1.2 KiB
C#

using System;
using System.Collections.Concurrent;
using Microsoft.AspNetCore.Authentication.JwtBearer;
namespace LDX.WebApi.Providers
{
public class OpenRefreshTokenProvider : AuthenticatorTokenProvider
{
private static ConcurrentDictionary<string, string> _refreshTokens = new ConcurrentDictionary<string, string>();
/// <summary>
/// 生成 refresh_token
/// </summary>
public override void Create(AuthenticationTokenCreateContext context)
{
context.Ticket.Properties.IssuedUtc = DateTime.UtcNow;
context.Ticket.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(60);
context.SetToken(Guid.NewGuid().ToString("n") + Guid.NewGuid().ToString("n"));
_refreshTokens[context.Token] = context.SerializeTicket();
}
/// <summary>
/// 由 refresh_token 解析成 access_token
/// </summary>
public override void Receive(AuthenticationTokenReceiveContext context)
{
string value;
if (_refreshTokens.TryRemove(context.Token, out value))
{
context.DeserializeTicket(value);
}
}
}
}