我正在開發使用WebBrowser控件的Windows Phone 8應用程序。網絡瀏覽器控制+身份驗證
當我將WebBrowser控件導航到經過NTLM驗證的網站時,沒有任何反應。唯一的事件是導航,控件保持白色,Navigated和NavigationFailed事件都不會觸發。
當我使用系統提供的網絡瀏覽器應用程序導航到同一網站時,它會顯示一個彈出窗口,詢問用戶名,密碼和域。
如何在我的應用程序中使用WebBrowser控件實現類似的行爲?
我正在開發使用WebBrowser控件的Windows Phone 8應用程序。網絡瀏覽器控制+身份驗證
當我將WebBrowser控件導航到經過NTLM驗證的網站時,沒有任何反應。唯一的事件是導航,控件保持白色,Navigated和NavigationFailed事件都不會觸發。
當我使用系統提供的網絡瀏覽器應用程序導航到同一網站時,它會顯示一個彈出窗口,詢問用戶名,密碼和域。
如何在我的應用程序中使用WebBrowser控件實現類似的行爲?
我只找到基本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身份驗證。
您可以使用您的身份驗證信息導航瀏覽器作爲postdata。
瀏覽器控件有過載方法導航接受postdata
NTLM比請求中包含一些數據更復雜,它是質詢 - 響應協議:http://blogs.msdn.com/b/chiranth/ archive/2013/09/21/ntlm-want-know-how-it-works.aspx 我嚴重懷疑你可以在發佈數據中提供憑證。 – Soonts
嗨,你有任何解決這個問題?如果是,請將其作爲答案發布。 – asitis
請看我的回答 – Soonts