3

我正在開發使用WebBrowser控件的Windows Phone 8應用程序。網絡瀏覽器控制+身份驗證

當我將WebBrowser控件導航到經過NTLM驗證的網站時,沒有任何反應。唯一的事件是導航,控件保持白色,Navigated和NavigationFailed事件都不會觸發。

當我使用系統提供的網絡瀏覽器應用程序導航到同一網站時,它會顯示一個彈出窗口,詢問用戶名,密碼和域。

如何在我的應用程序中使用WebBrowser控件實現類似的行爲?

+0

嗨,你有任何解決這個問題?如果是,請將其作爲答案發布。 – asitis

+0

請看我的回答 – Soonts

回答

6

我只找到基本HTTP身份驗證的解決方法。

爲了檢測這種情況,我在瀏覽Web瀏覽器之前發出HEAD HTTP請求。

如果沒有異常發生,我將瀏覽器導航到該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驗證值以「談判」,即服務器使用NTLM身份驗證,我不知道如何將證書傳遞給Web瀏覽器。至少我檢測到這種情況,並向我的最終用戶顯示適當的錯誤消息,告訴他/她不支持NTLM身份驗證。

+0

您節省了我的時間!謝謝! – vinnitu

+0

@vinnitu不客氣。順便說一句,斯拉夫Ukrayini! :-) – Soonts

+0

:) Geroyam slava! – vinnitu

-1

您可以使用您的身份驗證信息導航瀏覽器作爲postdata。

瀏覽器控件有過載方法導航接受postdata

+0

NTLM比請求中包含一些數據更復雜,它是質詢 - 響應協議:http://blogs.msdn.com/b/chiranth/ archive/2013/09/21/ntlm-want-know-how-it-works.aspx 我嚴重懷疑你可以在發佈數據中提供憑證。 – Soonts