向Webview控件提供域/用户凭据

4
有没有人知道如何向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个回答

5
为了连接到公司网络上的站点,您必须在 Package.appxmanifest 中启用 privateNetworkClientServer 功能。您可以在 XML 中执行此操作,也可以在 Visual Studio 中双击文件并使用设计器(功能选项卡)进行操作。在 UI 中称为“家庭或工作网络”。
现在您可以访问内部网络,但是您将被提示提供凭据。如果您希望用户的域标识自动提供(企业单一登录),则还需要启用 enterpriseAuthentication 功能。在清单 UI 中称为“企业身份验证”。
从那里,您应该能够使用 WebView 浏览任何内部网站而无需进行身份验证。如果您想在 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


3
感谢您提供详尽的回复。然而,enterpriseAuthentication功能只能传递当前已登录用户的信息,所以如果我需要传递不同的用户信息(例如Sharepoint凭据),我仍然无法实现,是吗? - Henry C

1
我曾遇到同样的问题,但幸运地找到了答案 :) 这里的主要问题是Windows存储应用程序包含2个不同的HttpClient。
其中一个是我们从C#应用程序中熟知的“经典”HttpClient(自动使用),而另一个是“新”HttpClient-与WebView连接 :)
以下是两种类型: System.Net.Http.HttpClient(经典版) Windows.Web.Http.HttpClient(新版)
因此,请记住声明新版本并执行类似下面的代码。
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身份验证。
在这种情况下,请记住关闭enterpriseAuthentication
希望这可以帮助寻找解决此问题的人 :)

这对于使用JavaScript编写的Windows Phone应用程序也适用。谢谢! - vfranchi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接