C# 通用应用程序NTLM适用于Windows应用商店,但不适用于Windows Phone
我正在构建一个通用应用程序,可以访问web API获取数据 当我在Windows应用商店应用程序中运行身份验证时,一切正常,我的登录调用得到200个响应,下面的代码中是对_url2的HTTP POST调用 当我从Windows Phone emulator运行完全相同的代码时,我得到一个401未经授权的密码 以下是我用来访问服务的代码:C# 通用应用程序NTLM适用于Windows应用商店,但不适用于Windows Phone,c#,windows-phone-8,ntlm,win-universal-app,C#,Windows Phone 8,Ntlm,Win Universal App,我正在构建一个通用应用程序,可以访问web API获取数据 当我在Windows应用商店应用程序中运行身份验证时,一切正常,我的登录调用得到200个响应,下面的代码中是对_url2的HTTP POST调用 当我从Windows Phone emulator运行完全相同的代码时,我得到一个401未经授权的密码 以下是我用来访问服务的代码: var handler = new HttpClientHandler { AllowAutoRedirect = true, PreAuthe
var handler = new HttpClientHandler
{
AllowAutoRedirect = true,
PreAuthenticate = true,
CookieContainer = _cookies,
Credentials = new NetworkCredential(username, password),
UseCookies = true,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
using (var client = new HttpClient(handler, true))
{
//client.DefaultRequestHeaders.Connection.Add("keep-alive");
// Having the Connection = keep-alive causes the phone to throw an exception... not needed, but annoying
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("*/*"));
var res = await client.GetAsync(_url1); // This works and will negotiate NTLM on both platforms. Returns 200 on both Phone and Store apps
client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
client.DefaultRequestHeaders.Referrer = new Uri(_url1);
client.DefaultRequestHeaders.Add("Origin", _url1);
using (var message = new HttpRequestMessage(HttpMethod.Head, _url2))
{
var header = await client.SendAsync(message); // 401 on Phone, 200 on Store app
}
var resp = await client.PostAsync(_url2, new StringContent(LoginContent)); // 401 on Phone, 200 on Store app
using (var stream = await resp.Content.ReadAsStreamAsync())
using (var reader = new StreamReader(stream))
{
var html = await reader.ReadToEndAsync();
ParseLoginResults(html);
}
}
我认为当客户端执行Get以外的操作时,它似乎没有完成NTLM握手。。。我还不能将Fiddler配置为与我的模拟器一起工作,所以我还没有很好地跟踪到底发生了什么。通信都是通过HTTPS进行的,所以我也无法通过WireShark获得任何有用的信息
知道为什么它可以在Windows应用商店应用程序上运行,但不能在手机上运行吗?NTLM身份验证是否还有其他解决方案?我可以手动完成所有操作吗?它远未完成,但您可以尝试以下方法:
然而,据我所知,windows phone emulator不允许https连接到本地主机。也许这就是你的问题。您需要添加一个证书以允许https通信 那么,您已经在模拟器中测试过了,但是您在windows phone设备上测试过代码了吗?我没有。我实际上没有解锁的设备:/app连接的服务器是否运行IIS?因此,根据该链接,预认证可能导致该错误。您可以尝试将PreAuthenticate设置为false,看看这是否也有帮助。它正在IIS上运行。我回家后会检查一下,看看这是否改变了什么:你找到解决办法了吗?我也有同样的问题。。。