Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

RefreshTokenManager.cs 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using BlackRock.Reporting.API.Core.Models;
  2. using Microsoft.AspNetCore.Identity;
  3. namespace BlackRock.Reporting.API.Authentication
  4. {
  5. public class RefreshTokenManager : IRefreshTokenManager
  6. {
  7. private readonly UserManager<ApplicationUser> userManager;
  8. public RefreshTokenManager(UserManager<ApplicationUser> userManager)
  9. {
  10. this.userManager = userManager;
  11. }
  12. public async Task<string> GenerateRefreshToken(ApplicationUser user)
  13. {
  14. var newRefreshToken = await userManager.GenerateUserTokenAsync(user, "MyApp", "RefreshToken");
  15. await userManager.SetAuthenticationTokenAsync(user, "MyApp", "RefreshToken", newRefreshToken);
  16. var refreshToken = await userManager.GetAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
  17. var isValid = await userManager.VerifyUserTokenAsync(user, "MyApp", "RefreshToken", refreshToken);
  18. if (!isValid)
  19. throw new UnauthorizedAccessException("Invalid token passed");
  20. return refreshToken;
  21. }
  22. public async Task RemoveRefreshToken(ApplicationUser user)
  23. {
  24. await userManager.RemoveAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
  25. }
  26. public async Task<bool> ValidateRefreshToken(ApplicationUser user, string refreshToken)
  27. {
  28. var refreshTokenFromDb = await userManager.GetAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
  29. if(refreshTokenFromDb == null || refreshTokenFromDb != refreshToken)
  30. throw new UnauthorizedAccessException("Invalid token passed");
  31. return true;
  32. }
  33. }
  34. }