有谁知道如何为WebView控件提供凭据(甚至更好 - 在特定域用户的上下文中运行Windows 8 Metro风格应用程序/ WinRT应用程序?)我尝试过遵循HttpClient + WebView方法此处列出(http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/05e46a0a-e913-469d-a4a5-4a805dcf158a)但它仍会提示用户输入凭据,因为在返回的内容中是安全物品的链接。
我有一个NetworkCredential对象,我非常想将它应用于每个发出的HTTP调用。
当然有人必须这样做过吗? :)
答案 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
希望它能帮助人们寻找解决这个问题的方法:)