コード例 #1
0
        => 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));
        }
コード例 #2
0
        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));
        }