WebView Source - automatic authentication

4

I am looking for a way to automatically authenticate for a web site. I've got a WebView in my c# Windows Store App and I want to access a site that is password protected.

WebView.Source= new URI("http://UserId:Password@foo.com/");

This is not working as I get a Security exception:

A security problem occurred. (Exception from HRESULT: 0x800C000E);

The method below is also not working as I only get the html of a site, but no css or JavaScript:

HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential("UserId", "Password");
HttpClient client = new HttpClient(handler);

string body = await client.GetStringAsync("http://foo.com");
webview.NavigateToString(body);     

Is there any other way?

c#
windows-runtime
windows-store-apps
winrt-xaml
asked on Stack Overflow Jul 25, 2013 by Johann

1 Answer

6

I have came across same problem, but luckily found an answer :) Main problem in here is that Windows store applications contain 2 different HttpClient's

One of them is "classic" one we know from c# apps (used automatically) and the other one is "new" HttpClient - which is connected with WebView :)

Bellow are both types :

System.Net.Http.HttpClient ( classic one )
Windows.Web.Http.HttpClient ( new one )

So remember to declare the new One and do something like the code bellow

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");

Now remember to change login and password to credentials you want to use, and a website is a site you want to authenticate to.

It is important to get the response from server - this will make user authenticated @ server so next time you go with webView to that site you will be authenticated

It works fine with basic authentication and NTLM authentication

Hope it will help people searching for solution of this problem :)

answered on Stack Overflow Oct 17, 2015 by Adrian S • edited Oct 17, 2015 by Manos Nikolaidis

User contributions licensed under CC BY-SA 3.0