【发布时间】:2017-09-17 12:18:15
【问题描述】:
问题
当运行 UWP 应用(具有企业身份验证功能)向受 Windows 身份验证保护的本地 IIS 网站发出 HTTP 请求时,该应用会收到 401 Unauthorized 响应。如果应用在与 IIS 不同的计算机上运行(应用移动到不同的计算机或请求远程 Windows 身份验证保护的 URL),则请求成功。
IIS
我正在运行已加入 AD 域的 Windows 10 Enterprise(周年纪念版)。
在我的本地 IIS 实例上,我为默认网站启用了 Windows 身份验证并禁用了匿名身份验证。启用的提供程序是“协商”和“NTLM”。
我还在根目录下创建了一个 test.aspx 页面,其中仅包含:
<%= User.Identity.Name %>
如果我在 Edge、Chrome 或 IE 中访问 http://localhost/test.aspx,我的身份验证正确并显示我的用户名。
UWP
我创建了一个简单的 UWP 应用(针对 build 14393),具有以下功能:
<Capabilities>
<Capability Name="internetClient" />
<Capability Name="privateNetworkClientServer" />
<uap:Capability Name="enterpriseAuthentication" />
<uap:Capability Name="userAccountInformation" />
</Capabilities>
应用程序的代码很简单:
public MainPage()
{
this.InitializeComponent();
var result = Nito.AsyncEx.AsyncContext.Run(async () =>
{
using (var httpClient = new System.Net.Http.HttpClient())
{
return await httpClient.GetStringAsync("http://localhost/test.aspx");
}
});
textBlock.Text = result;
}
结果
如果发出请求的 UWP 应用和 IIS 在同一台计算机上,则 UWP 应用中的 HTTP 请求会失败并显示 401 Unauthorized。
网络分析器显示已尝试身份验证(请注意,多个请求是 WWW-Authenticate 质询/响应方案的一部分):
如果请求的应用程序和 IIS 位于不同的计算机上,则请求成功。
也就是说,如果我将请求 URL 更改为我的开发计算机的 FQDN(http://localhost/test.aspx 变为 http://computername.domain/test.aspx)并在第二台计算机上运行应用程序(换句话说,第二台计算机上的应用程序调用我的开发计算机的 IIS),请求成功。或者,我可以在我的开发计算机上成功运行 UWP,但调用远程 IIS。
更多细节
- 如果在 localhost IIS 上启用匿名身份验证,UWP 应用的请求会导致 200 OK。
- 我在应用的 Debug 属性页面中选中了“允许本地网络环回”,并且我已通过 checknetisolation 验证了环回已启用。
【问题讨论】:
标签: authentication iis uwp windows-10 windows-10-universal