2011-02-28 148 views
0

我正在Intranet環境中編寫Silverlight客戶端和WCF服務庫解決方案。Silverlight和WCF與Windows身份驗證

據我所知,如果我設置Windows身份驗證,那麼調用服務方法將只會成功,如果調用方在Windows中進行身份驗證,我不需要編寫代碼來提供用戶憑據。我對此有幾個問題。

  1. 我正確嗎?

  2. 我被要求讓我的申請超時(通常與互聯網應用程序完成),使用戶再次登錄。但是,我已在高級IE選項中啓用了「集成Windows身份驗證」,並在「安全」部分中啓用了「僅在Intranet區域中自動登錄」。實際上,現在用戶不會登錄到我的應用程序,而是登錄到IE,Silverlight將這些憑據自動傳遞給WCF服務。我可以更改爲'提示輸入用戶名和密碼',但是隻有當IE關閉時,憑證纔會丟失,而我無法在超時時間內執行此操作。即使我能夠,我也不得不關閉所有參與Intranet區域的IE打開的Windows,因爲身份驗證似乎在他們之間共享。

  3. 是否可以冒充其他用戶?我已經看到代碼從Windows應用程序執行此操作,但使用Silverlight時的智能感知似乎沒有提供相同的功能?

回答

0

就我所知,您使用IIS Windows身份驗證。 WCF服務可以獨立配置,並且基於Windows身份也具有安全性,但是它們比傳統方法更難一些。

您的問題:

1.To禁用匿名用戶並且只允許誰在Windows authentificated的用戶,你可以寫下面的代碼:

<authorization> 
    <deny users="?"/> 
</authorization> 

用戶憑證將需要經過和自動通過。你不需要從客戶端的應用程序發送它們。 如果匿名認證被IIS禁用,一切都將工作,無需額外的代碼。

2.沒問題,IE和Chrome不像Firefox,每次用戶打開網頁時都不需要證書。如果您想要在超時後刷新應用程序的狀態,則可以在不請求憑據的情況下執行此操作,例如使用某種MessageBox。

3.身份驗證僅適用於服務器端。但是可能在WCF服務中編寫必要的代碼並從Silverlight客戶端調用它。

+0

RE要點1,如果我禁用匿名訪問,那麼WCF告訴我,即使使用Windows身份驗證,我也必須啓用匿名訪問。 RE第2點,你如何使超時憑證無效?當IE打開時,用戶總是登錄,所以當時間用完時,你會怎麼做? RE點3,我明白你的意思了,我沒有想到這一點,謝謝。 – EzaBlade 2011-02-28 21:22:33

+0

@EzaBlade在第二點,我無法想象在超時後更改憑證時必須失效的情況。但是當我用會話開發一個wcf服務時,我使用了一個擴展的代理類,它在由於超時導致的錯誤之後重新創建了通道。但是可能我已經把wcf與其他類型的超時時間混淆了。第一點很奇怪,因爲當我嘗試使用WCF數據服務時,IIS只允許僅使用一次認證。 – vorrtex 2011-02-28 23:14:52

+0

我們的滲透測試公司希望應用程序在閒置一段時間後自動註銷。由於我無法註銷,因爲唯一的方法就是關閉IE,我不能通過代碼來完成,那麼我需要使證書無效,以便進一步的操作會提示他們。作爲附註,您不能在Silverlight應用程序中使用WCF會話。 – EzaBlade 2011-04-14 22:37:57