public async Task EnsureAuthenticated(IServiceClientAccessToken serviceClientAccessToken)
        {
            ArgumentValidation.Validate(nameof(serviceClientAccessToken), serviceClientAccessToken);

            if (string.IsNullOrEmpty(_authenticationOptions.Value.RefreshToken) || string.IsNullOrEmpty(_authenticationOptions.Value.AccessToken))
            {
                Logger.Info("No credential data available.");
                return;
            }

            var ensureAuthenticationData = await
                                           _authenticatorClient.EnsureAuthenticatedAsync(_authenticationOptions.Value.RefreshToken,
                                                                                         _authenticationOptions.Value.AccessToken);

            if (ensureAuthenticationData.IsRefreshDone)
            {
                SaveAuthenticationData(ensureAuthenticationData.RefreshedAuthenticationData);
                serviceClientAccessToken.AccessToken = ensureAuthenticationData.RefreshedAuthenticationData.AccessToken;
                Logger.Info("Credential data has been refreshed.");
            }
            else
            {
                serviceClientAccessToken.AccessToken = _authenticationOptions.Value.AccessToken;
            }
        }
        protected ServiceClient(ServiceClientOptions options, IServiceClientAccessToken accessToken)
        {
            ArgumentValidation.Validate(nameof(options), options);
            ArgumentValidation.Validate(nameof(accessToken), accessToken);

            Options     = options;
            AccessToken = accessToken;
        }