UWP 应用程序设置默认代理和默认 Windows 身份验证

Posted

技术标签:

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

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

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

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

    更新我的PublicApplicationBuilder 以使用自定义HttpClientFactory
this.publicClientApp = PublicClientApplicationBuilder.Create(ClientId)
     .WithAuthority(Authority)
     .WithHttpClientFactory(new MsalHttpClientFactory())
     .OtherNonRelevantMethods()
     .Build();
    我创建了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 哈哈

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于UWP 应用程序设置默认代理和默认 Windows 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何更改默认 UWP 应用程序安装文件夹

如何以编程方式设置 UWP 应用的方向

目前有办法修改 Windows 10 里面 UWP 程序的图标吗

Windows 10 UWP Javascript 应用下载权限

windows7中如何更改safari中的默认用户代理? [关闭]

Xamarin Forms中的Android,IOS和UWP版本