/
va1eriy
/
taskwards
Обзор
Документация
Войти
/
va1eriy
/
taskwards
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Taskwards.Web/Infrastructure/Auth/TokenStorageService.cs
69 строк
2 KB
Valeriy Kokorev
feat: add automatic token refresh with AuthDelegatingHandler
27 фев 2026, 08:52
27 фев 2026, 08:52
afe7bb4
Код
Авторство
О чём код?
using Taskwards.Web.Infrastructure.Storage; namespace Taskwards.Web.Infrastructure.Auth; /// <summary> /// Реализация ITokenStorageService через ILocalStorageService /// </summary> public class TokenStorageService : ITokenStorageService { private const string AccessTokenKey = "access_token"; private const string RefreshTokenKey = "refresh_token"; private const string AccessTokenExpirationKey = "access_token_expiration"; private const string RefreshTokenExpirationKey = "refresh_token_expiration"; private readonly ILocalStorageService _localStorage; public TokenStorageService(ILocalStorageService localStorage) { _localStorage = localStorage; } public async Task SetTokensAsync(AuthResult authResult) { await _localStorage.SetItemAsync(AccessTokenKey, authResult.Tokens.AccessToken); await _localStorage.SetItemAsync(RefreshTokenKey, authResult.Tokens.RefreshToken); await _localStorage.SetItemAsync(AccessTokenExpirationKey, authResult.Tokens.AccessTokenExpiration.ToString("O")); await _localStorage.SetItemAsync(RefreshTokenExpirationKey, authResult.Tokens.RefreshTokenExpiration.ToString("O")); } public async Task<string?> GetAccessTokenAsync() { return await _localStorage.GetItemAsync(AccessTokenKey); } public async Task<string?> GetRefreshTokenAsync() { return await _localStorage.GetItemAsync(RefreshTokenKey); } public async Task<DateTime?> GetAccessTokenExpirationAsync() { return await GetExpirationAsync(AccessTokenExpirationKey); } public async Task<DateTime?> GetRefreshTokenExpirationAsync() { return await GetExpirationAsync(RefreshTokenExpirationKey); } public async Task ClearTokensAsync() { await _localStorage.RemoveItemAsync(AccessTokenKey); await _localStorage.RemoveItemAsync(RefreshTokenKey); await _localStorage.RemoveItemAsync(AccessTokenExpirationKey); await _localStorage.RemoveItemAsync(RefreshTokenExpirationKey); } private async Task<DateTime?> GetExpirationAsync(string key) { var value = await _localStorage.GetItemAsync(key); if (string.IsNullOrEmpty(value)) return null; if (DateTime.TryParse(value, null, System.Globalization.DateTimeStyles.RoundtripKind, out var expiration)) return expiration; return null; } }