CrateDB не может подключиться в HttpEndpoint к удаленному безопасному серверу - PullRequest
0 голосов
/ 04 июля 2019

Я тестировал crateDB 3.3.4 уже несколько недель, и я всегда подключался через localhost (127.0.0.1) в http.Я успешно импортировал данные с помощью HttpEndpoint на мой локальный хост.

Сейчас я тестирую облачный кластер в https.Мне удается открыть Chrome и войти в систему на сервере, но я не могу управлять удаленно в C # через HttpEndpoint.

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://remoteServerUrl:4200/_sql");
      httpWebRequest.Method = "POST";
      httpWebRequest.Credentials = new NetworkCredential("username", "password");
      httpWebRequest.Timeout = 600000;
      httpWebRequest.ContentType = "application/json";

      using(var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
      {
        streamWriter.Write(request);
        streamWriter.Flush();
      }

      HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse();
      success = response.StatusCode == HttpStatusCode.OK;

Когда я пробую следующий код, я всегда получаю «Базовое соединение было закрыто: неожиданнопроизошла ошибка при отправке. "и в исключении я вижу: «Невозможно записать данные в транспортное соединение: существующее соединение было принудительно закрыто удаленным хостом».

Есть идеи, что я здесь не так делаю?Я делал то же самое раньше на своем локальном хосте, но без указания учетных данных, и это работало замечательно.

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Исходя из вашего примера кода, вы используете аутентификацию по паролю.Постоянное решение действительно будет использовать заголовок авторизации.

Как описано здесь https://crate.io/docs/crate/reference/en/latest/admin/auth/methods.html#password-authentication-method

0 голосов
/ 04 июля 2019

Это не постоянное решение, но в тестовых целях оно работает. Я обошел проблему, добавив заголовок авторизации прямо в мой httpwebRequest.

httpWebRequest.Headers.Add(HttpRequestHeader.Authorization, "SomeBasicauthenticationToken");

Чтобы найти маркер аутентификации для прохождения, просто поместите имя пользователя и пароль в генератор токенов базовой аутентификации, подобный этому: https://www.blitter.se/utils/basic-authentication-header-generator/

Но если у кого-то есть постоянное решение, я все равно хотел бы посмотреть, что это такое.

...