3

我正在开发使用WebBrowser控件的Windows Phone 8应用程序。网络浏览器控制+身份验证

当我将WebBrowser控件导航到经过NTLM验证的网站时,没有任何反应。唯一的事件是导航,控件保持白色,Navigated和NavigationFailed事件都不会触发。

当我使用系统提供的网络浏览器应用程序导航到同一网站时,它会显示一个弹出窗口,询问用户名,密码和域。

如何在我的应用程序中使用WebBrowser控件实现类似的行为?

+0

嗨,你有任何解决这个问题?如果是,请将其作为答案发布。 – asitis

+0

请看我的回答 – Soonts

回答

6

我只找到基本HTTP身份验证的解决方法。

为了检测这种情况,我在浏览Web浏览器之前发出HEAD HTTP请求。

如果没有异常发生,我将浏览器导航到该URI。

如果发生异常,我会捕获WebException,获取e.Response.Headers集合,并检查WWW-Authenticate值。如果该值不是空的,我得出结论服务器要求认证。

如果WWW-Authenticate值以“basic”开头,我使用我自己的弹出控件向用户请求凭证。 然后我通过发出一个HEAD请求来验证证书,这次设置webClient.Credentials = new NetworkCredential(user,pass);

如果他们就好了,我用下面的方法终于凭据传递到Web浏览器控件:

public static Uri addCredsToUri(Uri u, string user, string pass) 
{ 
    UriBuilder uriSite = new UriBuilder(u); 
    uriSite.UserName = user; 
    uriSite.Password = pass; 
    return uriSite.Uri; 
} 

然而,如果WWW验证值以“谈判”,即服务器使用NTLM身份验证,我不知道如何将证书传递给Web浏览器。至少我检测到这种情况,并向我的最终用户显示适当的错误消息,告诉他/她不支持NTLM身份验证。

+0

您节省了我的时间!谢谢! – vinnitu

+0

@vinnitu不客气。顺便说一句,斯拉夫Ukrayini! :-) – Soonts

+0

:) Geroyam slava! – vinnitu

-1

您可以使用您的身份验证信息导航浏览器作为postdata。

浏览器控件有过载方法导航接受postdata

+0

NTLM比请求中包含一些数据更复杂,它是质询 - 响应协议:http://blogs.msdn.com/b/chiranth/ archive/2013/09/21/ntlm-want-know-how-it-works.aspx 我严重怀疑你可以在发布数据中提供凭证。 – Soonts