=> TimeSpan.FromSeconds(10); // TODO read from config protected override Task <bool> ValidateAuthenticationStateAsync(AuthenticationState authenticationState, CancellationToken cancellationToken) { var sid = authenticationState.User.Claims .Where(c => c.Type.Equals("sid")) .Select(c => c.Value) .FirstOrDefault(); if (sid != null && Cache.HasSubjectId(sid)) { var data = Cache.Get(sid); System.Diagnostics.Debug.WriteLine($"NowUtc: {DateTimeOffset.UtcNow.ToString("o")}"); System.Diagnostics.Debug.WriteLine($"ExpUtc: {data.Expiration.ToString("o")}"); if (DateTimeOffset.UtcNow >= data.Expiration) { System.Diagnostics.Debug.WriteLine($"*** EXPIRED ***"); Cache.Remove(sid); return(Task.FromResult(false)); } } else { System.Diagnostics.Debug.WriteLine($"(not in cache)"); } return(Task.FromResult(true)); }
public async Task <string> GetAccessToken() { // 获取当前用户的sid唯一标志 var state = await _authenticationState.GetAuthenticationStateAsync(); var sid = state.User.Claims .Where(c => c.Type.Equals("sid")) .Select(c => c.Value) .FirstOrDefault(); // 正常,则返回结果 if (sid != null && _cache.HasSubjectId(sid)) { return(_cache.Get(sid).AccessToken); } // 否则,跳转登录页,去认证中心拉取 _navigationManager.NavigateTo("/Login", true); return(await Task.FromResult(string.Empty)); }