Как использовать проверку подлинности Windows с библиотекой Flurl?

2

У Flurl есть методы для выполнения аутентификации OAuth и Basic:

await url.WithBasicAuth("username", "password").GetJsonAsync();
await url.WithOAuthBearerToken("mytoken").GetJsonAsync();

но как сделать проверку подлинности Windows с помощью текущего пользователя? HttpClientHandler, над которым Flurl построен сверху, имеет свойство UseDefaultCredentials, но я не знаю, как использовать его в Flurl.

var httpClient = new HttpClient(new HttpClientHandler() 
{
    UseDefaultCredentials = true
});
Теги:
flurl

1 ответ

3
Лучший ответ

Flurl интеллектуально повторно использует HttpClientHandler для каждого домена, поэтому вы не хотите устанавливать UseDefaultCredentials каждый раз, когда он запускается. Вместо этого вы можете изменить HttpClientFactory, чтобы вернуть тот, который настроен на UseDefaultCredentials.

public class UseDefaultCredentialsClientFactory : DefaultHttpClientFactory
{
    public override HttpMessageHandler CreateMessageHandler()
    {
        return new HttpClientHandler { UseDefaultCredentials = true };
    }
} 

Затем вам нужно сообщить Flurl, чтобы использовать эту фабрику для доменов, для которых вы хотите использовать проверку подлинности Windows.

public static class FlurlConfiguration
{
    public void ConfigureDomainForDefaultCredentials(string url)
    {
        FlurlHttp.ConfigureClient(url, cli =>
            cli.Settings.HttpClientFactory = new UseDefaultCredentialsClientFactory());
    }
}

Затем вам просто нужно вызвать это один раз при запуске для каждого домена. Для ASP.NET метод Application_Start в вашем глобальном классе приложений является хорошим местом для него.

FlurlConfiguration.ConfigureDomainForDefaultCredentials("https://example.com");
FlurlConfiguration.ConfigureDomainForDefaultCredentials("http://services.example.com");

Кредит идет к Тодду Менье для объяснения этого мне.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню