OpenRefreshTokenProvider.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Microsoft.Owin.Security.Infrastructure;
  2. using System;
  3. using System.Collections.Concurrent;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace ShwasherSys
  9. {
  10. public class OpenRefreshTokenProvider: AuthenticationTokenProvider
  11. {
  12. private static ConcurrentDictionary<string, string> _refreshTokens = new ConcurrentDictionary<string, string>();
  13. /// <summary>
  14. /// 生成 refresh_token
  15. /// </summary>
  16. public override void Create(AuthenticationTokenCreateContext context)
  17. {
  18. context.Ticket.Properties.IssuedUtc = DateTime.UtcNow;
  19. context.Ticket.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(60);
  20. context.SetToken(Guid.NewGuid().ToString("n") + Guid.NewGuid().ToString("n"));
  21. _refreshTokens[context.Token] = context.SerializeTicket();
  22. }
  23. /// <summary>
  24. /// 由 refresh_token 解析成 access_token
  25. /// </summary>
  26. public override void Receive(AuthenticationTokenReceiveContext context)
  27. {
  28. if (_refreshTokens.TryGetValue(context.Token, out string ticketData))
  29. {
  30. context.DeserializeTicket(ticketData);
  31. }
  32. }
  33. }
  34. }