【问题标题】:UWP Application setting default proxy with default windows authenticationUWP 应用程序设置默认代理和默认 Windows 身份验证
【发布时间】:2022-01-09 17:15:05
【问题描述】:

我有一个使用 Azure AD 登录的 UWP 应用。我将它部署到客户站点并且它停止登录。他们有一个带代理的网络,我无法访问他们的网络,所以我无法正确调试它。我提供的所有信息是:

有一个代理,您可能希望使用默认代理设置。代理需要默认的 windows 身份验证。

所以有了这些信息,这就是我尝试过的:

  1. 更新我的PublicApplicationBuilder 以使用自定义HttpClientFactory
this.publicClientApp = PublicClientApplicationBuilder.Create(ClientId)
     .WithAuthority(Authority)
     .WithHttpClientFactory(new MsalHttpClientFactory())
     .OtherNonRelevantMethods()
     .Build();
  1. 我创建了IMsalHttpClientFactory 的自定义实现,它尝试设置代理。有一个函数,GetHttpClient,它应该设置(顾名思义)一个具有所有必要配置的 HttpClient 对象
private HttpClient GetHttpClient()
{
     var handler = new HttpClientHandler();
     handler.UseProxy = true;
     handler.UseDefaultCredentials = true;
     return new HttpClient(handler);
}

这似乎不起作用。这是我第一次尝试同时使用默认代理和默认 Windows 凭据。

我也尝试使用以下代码手动设置代理凭据

private HttpClient GetHttpClient()
{
     var handler = new HttpClientHandler();
     handler.UseProxy = true;
     handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials
     return new HttpClient(handler);
}

但它似乎做同样的事情,因此不起作用。

最后我尝试从WebRequest 手动检索代理,从CredentialCache 手动检索凭据,但又一次......没有运气。

private HttpClient GetHttpClient()
{
     var handler = new HttpClientHandler();
     handler.UseProxy = true;
     handler.Proxy = WebRequest.DefaultWebProxy;
     handler.Proxy.Credentials = CredentialCache.DefaultCredentials;
     return new HttpClient(handler);
}

不幸的是,我的想法已经用完了,我已经能够通过 Telerik Fiddler 运行它来完成这项工作,所以显然 Fiddler 可以很好地到达代理,当 Fiddler 作为中间人运行时,我的应用程序可以工作美好的。但我不能简单地要求他们每次都运行 fiddler 哈哈

你有什么想法吗?我错过了一些超级简单的东西吗?

谢谢

【问题讨论】:

    标签: c# uwp proxy active-directory azure-active-directory


    【解决方案1】:

    恐怕代理在 UWP 平台上不起作用。请参考博客here

    对于这两个 API,代理设置会自动从 Internet Explorer/Microsoft Edge 设置中获取,并默认用于所有 HTTP 调用。即使用户通过代理连接到互联网,这也使应用程序能够自动运行。这两个 API 都没有提供为您的应用指定自定义代理的方法。但是,您可以通过将 HttpClientHandler.UseProxy 设置为 false(对于 System.Net.Http)或将 HttpBaseProtocolFilter.UseProxy 设置为 false(对于 Windows.Web.Http)来选择不使用默认代理。

    所以我们现在不能对单个 HTTP 请求使用自定义代理。如果您确实想要这个,请随时使用 Windows 反馈中心应用发布您的功能请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      相关资源
      最近更新 更多