2009-12-14 70 views
2

我有一個WCF服務,我只希望我的應用程序有權訪問。我的應用程序由使用JQuery和Silverlight界面的傳統Web界面組成。這些界面都不需要用戶登錄。WCF - 防止未經授權的客戶端

有沒有一種方法可以告訴WCF服務只允許源自我的域的客戶端?如果是這樣,怎麼樣?

謝謝!

回答

2

是的,當然,您可以 - 只需要呼叫者的Windows憑據(即您域中的Active Directory帳戶)。

任何未通過身份驗證的人都將被拒絕。

您可以通過指定NetTcpBinding的傳輸安全性(如果一切是企業防火牆後面),或的wsHttpBinding與信息安全做到這一點:

<bindings> 
    <netTcpBinding> 
     <binding name="DomainUsersOnly"> 
     <security mode="Transport"> 
      <transport clientCredentialType="Windows" /> 
     </security> 
     </binding> 
    </netTcpBinding> 
    <wsHttpBinding> 
     <binding name="HttpDomainUsersOnly"> 
     <security mode="Message"> 
      <message clientCredentialType="Windows" /> 
     </security> 
     </binding> 
    </wsHttpBinding> 
</bindings> 

現在,所有你需要做的是參考其中的一個綁定配置在你的端點:

<endpoint name="whatever" 
      address="......" 
      binding="netTcpBinding" 
      bindingConfiguration="DomainUsersOnly" 
      contract="IYourservice" /> 

你應該很好去。

+0

儘管如此,我認爲如果用戶具有與域用戶相同的用戶名和密碼(不太可能,我知道),那麼他們將被認證爲域用戶。 – 2009-12-14 16:48:59

+0

不,他們不會 - 他們需要擁有真正的Windows憑據 - 來自您的域的Windows安全令牌 - 不僅僅是偶然的同名。 – 2009-12-14 17:18:51

+0

那麼你如何解釋表格中的第三列: http://msdn.microsoft.com/en-us/library/ms164725.aspx – 2009-12-14 17:32:54

0

您可以在IIS中添加安全限制,以允許從域調用web服務。

0

除非您考慮Windows身份驗證(因爲請求來自您的域),否則通過防火牆執行此操作的首選方式將處於不同的級別。在該級別,您可以將傳入流量限制爲已知的一組IP地址。這隻會走得這麼遠,因爲IP可能被欺騙,但這是一個開放的服務,所以你去了。一個更好的替代方案是兩個防火牆和Windows身份驗證。

或者,您可以通過查詢OperationContext.Current.IncomingMessageProperties來檢查WCF中的客戶端IP地址。

1

如果您的所有合法用戶都應該在您的企業內部LAN上(在同一子網上),那麼您可以使用類似this的方法通過IP地址將其鎖定。如果你願意的話,你也可以將它固定在幾個特定的​​IP掩碼上。

但是,如果您想允許合法用戶從任何地方打它,那麼這不是一個好方法。在這種情況下,認證會更好。

相關問題