2011-09-20 75 views
3

我有一個託管Web瀏覽器控件的Winforms應用程序。在此控件中,您還可以導航到預定義的外部網站。在Winforms Web瀏覽器控件上單點登錄

我需要實現單點登錄,以便用戶不需要在每個已知的外部網站中進行身份驗證。我已經有了一些想法,但很高興聽到你的意見。

這樣做的最好方法是什麼?

事實上,有沒有這方面的東西? (編輯:瀏覽器如何記住登錄名/密碼)?

乾杯

回答

1

一般來說是該網站的實現SSO的責任,客戶端會自動響應該網站。由於Web瀏覽器控件使用IE,因此它繼承了與Web瀏覽器相同的功能。例如,如果該網站使用Windows Authentication,那麼該控件將在沒有用戶干預的情況下在來自該網站的挑戰之後進行認證。同樣,如果網站使用SAML 2.0,控件將執行必要的重定向。

由於這些是外部網站,我必須假定Windows身份驗證不會很好地工作,因爲服務器和客戶端位於不同的域。因此,SAML聽起來像是最安全的選擇。

看起來好像實施SAML會對您造成問題,您需要手動完成並提交加載在控件內部的Web窗體。這可以通過訪問DOM來實現,但它很快就會變得難以維護解決方案。

網絡瀏覽器控件提供了一個document property,它提供了一個HtmlDocument對象,它允許您在頁面中使用find elementsexecute JavaScript。您需要使用這些機制來自動執行身份驗證。這些步驟可能如下所示:

  1. 捕獲URL或一些cookie,通過檢查Web瀏覽器控件屬性可以讓您知道是否需要驗證。你可能想看看OnNavigate()
  2. 訪問文檔並填寫表單值。
  3. 調用JavaScript提交函數來提交表單,或者注入一些JavaScript來執行此操作。我發現在頁面中插入JavaScript比在許多情況下編寫更復雜的C#代碼更容易。在常規瀏覽器中進行原型製作更容易。
0

除非網站都有一個共同的可信認證機制(如OpenID)你堅持做定製編碼爲每個站點。

瀏覽器記住單個站點的密碼。我不會稱之爲「單一登錄」,這是一種使用可信機構在多個網站上進行身份驗證的方法,這些網站都依賴該權限來驗證用戶的身份。

至於你問SSO包已經做到這一點,一些例子是:

+0

所有的網站都不共享一個通用的可信認證機制(當然,如果他們最有可能我不會做任何事情)。我無法控制它們,因爲它們是外部系統。我想要做的事情就像瀏覽器如何識別特定網站的表單並預先填充用戶的數據,之後我只需要向用戶提交表單(我的想法之一)。你知道一些API或什麼可以做到這一點?這是我的目標...... –