2014-01-11 60 views
1

WCF服務,我開發使用由我開發了一個WCF服務Windows窗體應用程序託管互聯網上支付託管。如何避免使用來自未知客戶

在我的WCF服務,我有一些OperationContracts提供一些funcionallity到Windows客戶端形成。 如果我樹立了新的服務引用指向在我的Windows我的WCF服務客戶端形成我可以使用OperationContracts。到這裏沒有問題。

如果有人「知道」地址到我的WCF服務,任何人都可以在他/她自己的「客戶端應用程序中使用我的「自己」的WCF服務。

使用像Wireshark的它非常簡單的工具來檢索WCF服務的URL。

所以,我的問題...有某種保護,以避免呢? 我不希望'其他客戶'使用我自己的WCF服務。

PS:不能在我的支付託管使用SSL證書。

+1

添加引用不是一個大問題..但是你可以把**認證**,以便只有有效的客戶端可以訪問功能(操作合同)。 – Sachin

+1

您是否真的想讓它只有您的CLIENT才能訪問該服務,或者您是否確實只關心被授權的USERS,而不管他們正在使用哪個客戶端。無法確保100%只有您的客戶可以致電您的服務。另一方面很容易確保只有授權用戶纔可以。 –

+0

閱讀此MSDN鏈接(http://msdn.microsoft.com/en-us/library/ff405740.aspx)我看到有一些身份驗證方法(Windows,基本,證書,NTLM或無)我無法使用任何人這些。窗戶顯然不是。我的應用程序不是一個域的應用程序,基本都沒有(打開它與一些'反射器和獲得用戶/通過納秒),NTLM既不(如Windows認證),最後證書也許,但我不明白它是如何工作的。 – user3122306

回答

0

不是100%肯定這是你在找什麼,哪怕是我建議實行某種形式的授權,以及,但你可以通過httpGetEnabled屬性設置爲false禁用該服務的WSDL在服務的配置文件中:

<behaviors> 
    <serviceBehaviors> 
    <behavior name="MyServiceBehavior"> 
     <serviceMetadata httpGetEnabled="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

這將禁用發佈WSDL(至少據我瞭解)。因此,將服務引用添加到您的應用程序,然後將該值設置爲「false」。即使有人嗅探你的服務地址,他們也無法拉動WSDL來生成代理。

編輯

爲了澄清,上面的屬性設置爲false不會隱藏服務URL - 它僅僅關閉WSDL。如果誰知道你的服務的URL,但確實不代理將需要的WSDL生成代理。 httpGetEnabled="false"防止WSDL被服務,從而阻止生成代理。

由於無法在託管站點上使用SSL證書,因此自定義用戶名驗證程序(即使使用消息作爲傳輸模式)似乎不是一個選項,因爲WCF「WCF強制使用UserName時保證傳輸安全證書。」 (例如參見<message> element of <wsHttpBinding>),關於我唯一可以看到的其他選項是使用安全令牌服務(STS)。

最後的選擇是把服務在專用網絡上,但可能會打敗你要完成,這取決於你的需求是什麼。

另一個最終選項(這使得它不是最終選項,我猜)將移動到一個託管站點,確實允許您使用SSL。

對於STS,你可以看看Windows Identity Foundation,它與.NET 4.5完全集成。如果您使用.NET的早期版本,則可以查看WCF Security Token Service

+0

默默無聞的安全措施經常會被咬死。 –

+0

@WiktorZychla - 我同意,這也是我也推薦使用某種授權的原因。 – Tim

+0

擴大你的答案這部分可能是一個好主意。 –

1

您應該添加認證爲你服務。身份驗證可以使用不同的技術: 用戶名 - 密碼,證書等。 關於簡單的用戶名,密碼,身份驗證您可以閱讀here

+0

您鏈接的文章仍然需要證書 - 「要使用用戶名密碼驗證來運行託管服務的服務器需要X509證書」 –

+0

如果您要使用https,則它不是。 –

+0

...但您必須擁有使用https的證書! –