2011-07-14 50 views
0

我已經使用WSDualHttpBinding創建了一個WCF服務。未指定安全模式,因此將其設置爲WSDualHttpSecurityMode.Message。帶有郵件安全模式的WCF服務中的匿名函數調用

它工作正常,從客戶端連接到具有證書的服務器,這是允許的。

當我使用憑據連接到服務器時,這是不被允許的,我得到一個SecurityNegotiationException。

這就是所有好的,我現在想要做的是,服務中有一個功能,允許匿名調用。

所以我想嘗試調用該服務,並且當我的憑據不被允許時,我想調用一個名爲GetDescription()的函數,該函數將返回該服務的描述。

原因是,我們正在託管一些服務,並通過廣播發現它們。如果有服務,客戶端不被允許,我想從服務中看到一些細節,通過重新配置服務來解決這個問題。

回答

0

驗證在您的任何操作之前執行很長時間,因此具有開箱即用功能是不可能的,因爲在WCF甚至知道用戶調用什麼操作之前發生異常。基於用戶「權限」執行操作屬於授權,僅對經過身份驗證的用戶執行操作。如果您想要現在做WCF,可能需要對安全管道進行一些修改,並將所選的SOAP操作從身份驗證中排除(我實際上不確定如何執行此操作)。

您正在使用哪種類型的身份驗證?如果您有默認配置,您應該擁有基於Windows的身份驗證,然後您的用戶只需使用有效的AD帳戶登錄即可調用您的服務。

Btw。爲什麼你在做自定義發現時WCF offers its own?您應該使用與WCF發現相同的機制 - 公開單獨的不安全端點進行發現。

+0

目前只有基於Windows的身份驗證服務,但將來還會有一些服務使用自定義身份驗證。因此,我首先想嘗試與基於Windows的身份驗證進行連接,如果此操作失敗,我想要求用戶輸入憑據並希望嘗試使用這些憑據連接到該服務。 當時,當我要求用戶輸入憑證時,我想顯示一些有關該服務的詳細信息,以便用戶可以更容易地識別服務,因爲在同一臺計算機上將運行多個服務。 – christian

+0

我想這將需要完全取代WCF認證機制。這通常通過暴露兩個端點來完成 - 一個用於Windows身份驗證,一個用於用戶名身份驗證。你試圖做的主要是WCF/Web服務範圍之外。 –

+0

我認爲你是對的。也許我必須提供兩個wcf服務。一個安全的和一個沒有安全的提供描述。 – christian