繁体   English   中英

Web浏览器控制+身份验证

[英]web browser control + authentication

我正在开发一个使用WebBrowser控件的Windows Phone 8应用程序。

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

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

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

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

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

如果没有异常发生,我将Web浏览器导航到该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-Authenticate值以“negotiate”开头,即服务器使用NTLM身份验证,我不知道如何将凭据传递给Web浏览器。 至少我检测到这种情况,并向我的最终用户显示一条相应的错误消息,告诉他/她不支持NTLM身份验证。

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

webbrowser控件具有重载方法导航,它接受postdata

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM