我遇到与此处描述完全相同的问题:Using Default Credentials in System.Net.HttpClient request in UWP
我已登录域名。在我的UWP应用程序中,我想使用域凭据作为SharePoint的身份验证。我尝试过与上面的URL中描述的步骤相同的步骤。它确实可以在de代码中设置凭据,但这不是我想要的。
我试过的示例代码。
var handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
var server = "{ServerUrl}";
using (var client = new HttpClient(handler))
{
var responseMessage = await client.GetAsync(server, system.Net.Http.HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);
var responseData = await responseMessage.Content.ReadAsByteArrayAsync();
responseData.ToArray();
}
这总是返回401错误。
一些额外信息:
它也可以使用PowerShell并执行以下命令:Invoke-WebRequest -Method GET -Uri "{ServerUrl}" -UseDefaultcredentials
。然后它返回200状态代码。
有人有个主意吗?
编辑:创建一个新的Windows 8.1应用程序并使用上面的代码确实有效(与上面的URL相同)。这些之间有什么区别?
EDIT2:在寻找Fiddler时,我看到以下内容:
使用Windows 8.1应用程序:
picture
首先,它发送带有标头WWW-Authenticate: NTLM
的请求,然后它发送另一个具有相同标头的请求,但随后发送一个令牌。在该请求之后,它返回200代码。
使用UWP应用:
picture
在UWP中,它仅使用WWW-Authenticate: NTLM
发送请求。然后它什么也没做。
我还发现了这一点:https://github.com/dotnet/corefx/issues/9234和https://github.com/dotnet/corefx/issues/27672这是同一个问题。该问题转发给了这个问题:https://github.com/dotnet/corefx/pull/28105并且应该在.NET Core 2.1中(尚未推出,Q2)。这应该如何在UWP中发挥作用,我该怎么办呢?
编辑3:设置UseDefaultCredentials = true
后,立即将其设置为false。 => https://github.com/dotnet/corefx/blob/f71c9d72cb776018147992ea0de8e08a440c4a4a/src/System.Net.Http/src/uap/System/Net/HttpClientHandler.cs#L183
最终编辑:Oke,作为描述的第一个链接,设置本地Intranet站点的URL确实有效。首先,我不知道他们为此做了什么。经过一些研究后,我发现了这个链接:https://technet.microsoft.com/en-us/library/dd572939(v=office.13).aspx#Anchor_0设置网址后,我可以使用域凭据进行身份验证。我没有在处理程序上设置任何属性。仅将Enterprise身份验证作为功能。这为我清除了很多东西,应该在一个控制良好的内部网环境中工作(我在VPN和Domain上,我没有控制权)。