using Microsoft.Owin.Security.Infrastructure; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ShwasherSys { public class OpenRefreshTokenProvider: AuthenticationTokenProvider { private static ConcurrentDictionary _refreshTokens = new ConcurrentDictionary(); /// /// 生成 refresh_token /// 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(); } /// /// 由 refresh_token 解析成 access_token /// public override void Receive(AuthenticationTokenReceiveContext context) { if (_refreshTokens.TryGetValue(context.Token, out string ticketData)) { context.DeserializeTicket(ticketData); } } } }