//-------------------------------- Not use zone ----------------------------------------------------------------

        private OAuthToken GetTokenByRefresh(RefreshToken refreshToken) //! if I will use this, I can't update claims data
        {
            _logger.InitMethod(nameof(GetTokenByRefresh), $"[RefreshToken.UserId] {refreshToken.UserId}");

            var claims = _tokenHandler.GetClaimsFromToken(refreshToken.Access);

            _logger.LogInformation("user claims: " + claims.ToJson());

            var token = _tokenHandler.Create(_configuration["Jwt:Key"], int.Parse(_configuration["Jwt:LifeTimeInMinutes"]), claims);

            _logger.LogInformation($"token successfully created | rTokenLength: {token.RefreshToken.Length} | aTokenLength: {token.AccessToken.Length}");

            return(token);
        }
        public override Task <ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
        {
            if (httpContext == null)
            {
                throw new ArgumentNullException(nameof(httpContext));
            }

            _tokenHandler = GetService <ITokenHandler>(httpContext);                                   //? haven't better way?
            _logger       = GetService <ILogger <UserPreferenceRequestCultureProvider> >(httpContext); //? haven't better way?

            _logger.LogInformation("init searching language preference");

            var headers = httpContext.Request.GetTypedHeaders().Headers[HeaderName].AsEnumerable()?.ToList();

            if (headers == null || headers.Count == 0 || !headers[0].Contains(TokenType, StringComparison.InvariantCultureIgnoreCase))
            {
                _logger.LogInformation("no authorization: stop searching language preference");
                return(NullProviderCultureResult);
            }

            var accessToken = headers[0].Replace(TokenType, "").Trim();

            var claims = _tokenHandler.GetClaimsFromToken(accessToken);

            if (claims.IsNullOrEmpty())
            {
                _logger.LogWarning("claims not found");
                return(NullProviderCultureResult);
            }

            var cultureName = claims.FirstOrDefault(c => c.Type == UserPreferenceParamName)?.Value;

            if (cultureName.IsNullOrWhiteSpace())
            {
                _logger.LogInformation("claims haven't language preference");
                return(NullProviderCultureResult);
            }

            _logger.LogInformation($"language preference found: {cultureName}");

            return(Task.FromResult(new ProviderCultureResult(cultureName)));
        }