C# - HttpRequest要求第二个登录凭据

时间:2014-10-06 13:25:17

标签: c# authentication ssl win-universal-app

我正在开发一款Windows Universal应用。在这个应用程序中,我必须在webview中显示一个需要身份验证才能访问的网站。我通过以下方式访问它:

    Uri url = new Uri("https://ssl.mywebsite.nl/");
    HttpWebRequest http = (HttpWebRequest)HttpWebRequest.Create(url);
    http.Credentials = new NetworkCredential(userName, userPassword);
    HttpWebResponse response = (HttpWebResponse)await http.GetResponseAsync();
    webView.Source = response.ResponseUri;

这在Windows Phone上运行得非常好。然而,在Windows上,我得到一个屏幕,要求我登录说:

  

“服务器ssl.mywebsite.nl正在询问您的用户名和密码。   服务器报告它来自请登录。“

这是Windows 8.1中的错误还是我遗漏了一些非常明显的错误?

1 个答案:

答案 0 :(得分:1)

所以我相信这个在Windows Phone上工作但不在Windows桌面上的原因是因为它在Windows Phone上缓存了凭据而在Windows上没有。这导致Windows Phone成功进行未来的身份验证尝试。而且由于我试图在WebView中显示检索到的信息的方式意味着它必须重新进行身份验证,导致在Windows Phone上成功显示,但在Windows上显示失败(或者更确切地说是验证问题)。

解决方案:

string encoded = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1")
    .GetBytes(userName + ":" + userPassword));
HttpRequestMessage mess = new HttpRequestMessage(HttpMethod.Get, 
    new Uri("https://ssl.mywebsite.nl/"));
mess.Headers.Add("Authorization", "Basic " + encoded);
webView.NavigateWithHttpRequestMessage(mess);

此方法允许请求始终使用给定的凭据,因此不要求用户提供它们。