代码之家  ›  专栏  ›  技术社区  ›  mason Tim Schmelter

如何在Flurl库中使用Windows身份验证?

  •  4
  • mason Tim Schmelter  · 技术社区  · 6 年前

    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
    });
    
    1 回复  |  直到 6 年前
        1
  •  13
  •   sebd    6 年前

    Flurl智能地为每个域重用HttpClientHandler,因此您不希望每次运行时都设置UseDefaultCredentials。相反,您可以修改HttpClientFactory以返回配置为usefaultcredentials的工厂。

    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,全局应用程序类中的Application\u Start方法是一个很好的地方。

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

    功劳归于 Todd Menier for explaining this to me

        2
  •  -1
  •   Greg Uretzky    5 年前

    如果仍然相关。你可以设置凭据,类似这样的

     ((HttpClientHandler)url.Client.HttpMessageHandler).Credentials = new NetworkCredential(userName, password);