如何通过 Flurl 库使用 Windows 身份验证?
How do I use Windows Authentication with the Flurl library?
Flurl 具有执行 OAuth 和基本身份验证的方法:
await url.WithBasicAuth("username", "password").GetJsonAsync();
await url.WithOAuthBearerToken("mytoken").GetJsonAsync();
但是如何使用当前登录的用户进行 Windows 身份验证? Flurl 构建于其之上的 HttpClientHandler 有一个 属性 UseDefaultCredentials 但我不知道如何在 Flurl 中使用它。
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
Flurl 智能地为每个域重用 HttpClientHandler,因此您不想在每次运行时都设置 UseDefaultCredentials。相反,您可以将 HttpClientFactory 修改为 return 配置为 UseDefaultCredentials 的
public class UseDefaultCredentialsClientFactory : DefaultHttpClientFactory
{
public override HttpMessageHandler CreateMessageHandler()
{
return new HttpClientHandler { UseDefaultCredentials = true };
}
}
然后您需要告诉 Flurl 将此工厂用于您要使用 Windows 身份验证的域。
public static class FlurlConfiguration
{
public static void ConfigureDomainForDefaultCredentials(string url)
{
FlurlHttp.ConfigureClient(url, cli =>
cli.Settings.HttpClientFactory = new UseDefaultCredentialsClientFactory());
}
}
然后您只需在每个域的启动时调用一次。对于 ASP.NET,全局应用程序 class 中的 Application_Start 方法是一个很好的地方。
FlurlConfiguration.ConfigureDomainForDefaultCredentials("https://example.com");
FlurlConfiguration.ConfigureDomainForDefaultCredentials("http://services.example.com");
如果它仍然相关。您可以设置凭证,像这样
((HttpClientHandler)url.Client.HttpMessageHandler).Credentials = new NetworkCredential(userName, password);
Flurl 具有执行 OAuth 和基本身份验证的方法:
await url.WithBasicAuth("username", "password").GetJsonAsync();
await url.WithOAuthBearerToken("mytoken").GetJsonAsync();
但是如何使用当前登录的用户进行 Windows 身份验证? Flurl 构建于其之上的 HttpClientHandler 有一个 属性 UseDefaultCredentials 但我不知道如何在 Flurl 中使用它。
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
Flurl 智能地为每个域重用 HttpClientHandler,因此您不想在每次运行时都设置 UseDefaultCredentials。相反,您可以将 HttpClientFactory 修改为 return 配置为 UseDefaultCredentials 的
public class UseDefaultCredentialsClientFactory : DefaultHttpClientFactory
{
public override HttpMessageHandler CreateMessageHandler()
{
return new HttpClientHandler { UseDefaultCredentials = true };
}
}
然后您需要告诉 Flurl 将此工厂用于您要使用 Windows 身份验证的域。
public static class FlurlConfiguration
{
public static void ConfigureDomainForDefaultCredentials(string url)
{
FlurlHttp.ConfigureClient(url, cli =>
cli.Settings.HttpClientFactory = new UseDefaultCredentialsClientFactory());
}
}
然后您只需在每个域的启动时调用一次。对于 ASP.NET,全局应用程序 class 中的 Application_Start 方法是一个很好的地方。
FlurlConfiguration.ConfigureDomainForDefaultCredentials("https://example.com");
FlurlConfiguration.ConfigureDomainForDefaultCredentials("http://services.example.com");
如果它仍然相关。您可以设置凭证,像这样
((HttpClientHandler)url.Client.HttpMessageHandler).Credentials = new NetworkCredential(userName, password);