为webview控件提供域/用户凭据

时间:2012-06-24 22:49:44

标签: windows-8 impersonation winrt-xaml networkcredentials dotnet-httpclient

有谁知道如何为WebView控件提供凭据(甚至更好 - 在特定域用户的上下文中运行Windows 8 Metro风格应用程序/ WinRT应用程序?)我尝试过遵循HttpClient + WebView方法此处列出(http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/05e46a0a-e913-469d-a4a5-4a805dcf158a)但它仍会提示用户输入凭据,因为在返回的内容中是安全物品的链接。

我有一个NetworkCredential对象,我非常想将它应用于每个发出的HTTP调用。

当然有人必须这样做过吗? :)

2 个答案:

答案 0 :(得分:4)

要连接到公司网络上的网站,您必须在 Package.appxmanifest 中启用 privateNetworkClientServer 功能。您可以在XML中执行此操作,也可以在Visual Studio中双击该文件并使用设计器(功能选项卡)。在UI中,它被称为“家庭或工作网络”。

现在您可以访问Intranet,您可以导航到该站点,但系统将提示您提供凭据。如果您希望自动提供用户域身份(企业单点登录),则还需要启用 enterpriseAuthentication 功能。这在清单UI中称为“企业身份验证”。

从那里,您应该可以使用WebView浏览到任何Intranet站点,而无需进行身份验证。如果您希望在WebView之外执行操作,则应查看以下文章和示例:

使用WebAuthenticationBroker:

http://code.msdn.microsoft.com/windowsapps/Web-Authentication-d0485122

WebAuthenticationBroker有一个名为 UseCorporateNetwork 的选项。请务必在上面的示例中使用它。

最后,如果您想与Facebook或Flicr等其他网站进行单点登录,请参阅此示例:

http://msdn.microsoft.com/en-US/library/windows/apps/xaml/Hh465283

答案 1 :(得分:1)

我遇到了同样的问题,但幸运的是找到了答案:) 这里的主要问题是Windows应用商店应用程序包含2个不同的HttpClient

其中一个是"经典"我们从c#apps中知道的(自动使用),另一个是" new" HttpClient - 与WebView连接:)

贝娄是两种类型: System.Net.Http.HttpClient(经典之一) Windows.Web.Http.HttpClient(新的)

所以请记住声明新的One并执行类似下面的代码

var filter = new HttpBaseProtocolFilter();    
filter.ServerCredential = new Windows.Security.Credentials.PasswordCredential("http://website","login", "password");
            Windows.Web.Http.HttpClient client2 = new Windows.Web.Http.HttpClient(filter);
            var response = await client2.GetAsync(new Uri("http://website"));
 WebView.Source = new Uri("http://website");

现在请记住将登录名和密码更改为您要使用的凭据,并且网站是您要进行身份验证的网站。

从服务器获取响应非常重要 - 这将使用户通过身份验证@服务器,以便下次使用webView访问该站点时,您将进行身份验证

它适用于基本身份验证和NTLM身份验证

在此cae场景中,请记得关闭 enterpriseAuthentication

希望它能帮助人们寻找解决这个问题的方法:)