35 lines
1.0 KiB
C#
35 lines
1.0 KiB
C#
using Microsoft.AspNetCore.Components.Authorization;
|
|
|
|
namespace TechHelper.Client.HttpRepository
|
|
{
|
|
public class RefreshTokenService
|
|
{
|
|
private readonly AuthenticationStateProvider _authenticationStateProvider;
|
|
private readonly IAuthenticationClientService _authenticationClientService;
|
|
|
|
public RefreshTokenService(AuthenticationStateProvider authenticationStateProvider, IAuthenticationClientService authenticationClientService)
|
|
{
|
|
_authenticationStateProvider = authenticationStateProvider;
|
|
_authenticationClientService = authenticationClientService;
|
|
}
|
|
|
|
public async Task<string> TryRefreshToken()
|
|
{
|
|
var authState = await _authenticationStateProvider.GetAuthenticationStateAsync();
|
|
var user = authState.User;
|
|
var expClaim = user.FindFirst(c => c.Type.Equals("exp")).Value;
|
|
var expTime = DateTimeOffset.FromUnixTimeSeconds(
|
|
Convert.ToInt64(expClaim));
|
|
|
|
var diff = expTime - DateTime.UtcNow;
|
|
if (diff.TotalMinutes <= 2)
|
|
return await _authenticationClientService.RefreshTokenAsync();
|
|
|
|
return string.Empty;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|