Это просто копия моего ответа на тот же вопрос, который был задан в качестве вопроса о восстановлении :
Refit использует стандарт .NET HttpClient
(вы явно используете его в своем примере), поэтому он так же безопасен, как если бы вы использовали HttpClient
напрямую.
В вашем примере вы устанавливаете базовый адрес для HTTPS URI, и это все, что Refit будет когда-либо использовать для инициации запросов.
Однако, если ваш сервер перенаправлен на HTTP URI (что очень маловероятно), а HttpClient
настроен на автоматическое отслеживание перенаправлений (что может быть по умолчанию), тогда последующий запрос может быть перенаправлен на этот небезопасный URL. Если бы это было так, ваш обработчик отправил бы пароль по небезопасному запросу.
Это довольно маловероятная ситуация, , но в любом случае это легко исправить - просто проверьте схему URL-адреса, прежде чем прикреплять свой пароль :
class AuthenticatedHttpClientHandler : HttpClientHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if(string.Equals(request.RequestUri.Scheme, "https", StringComparison.OrdinalIgnoreCase))
request.Headers.Add("pw", "MY_SECRET_PW");
return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
}
}
Таким образом, если вы каким-то образом завершите выдачу HTTP-запроса вместо HTTPS, вы не отправите с ним свой пароль.
Если вы беспокоитесь о том, что ваш пароль может быть перехвачен в запросе HTTPS, это действительно возможно только в том случае, если компьютер, на котором работает клиент, был взломан и доверяет кому-то, что не должен. Но если это так, есть более простые способы получить ваш пароль, например, например, путем декомпиляции DLL или чтения конфигурационных файлов.