我有一個WCF服務,我只希望我的應用程序有權訪問。我的應用程序由使用JQuery和Silverlight界面的傳統Web界面組成。這些界面都不需要用戶登錄。WCF - 防止未經授權的客戶端
有沒有一種方法可以告訴WCF服務只允許源自我的域的客戶端?如果是這樣,怎麼樣?
謝謝!
我有一個WCF服務,我只希望我的應用程序有權訪問。我的應用程序由使用JQuery和Silverlight界面的傳統Web界面組成。這些界面都不需要用戶登錄。WCF - 防止未經授權的客戶端
有沒有一種方法可以告訴WCF服務只允許源自我的域的客戶端?如果是這樣,怎麼樣?
謝謝!
是的,當然,您可以 - 只需要呼叫者的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" />
你應該很好去。
您可以在IIS中添加安全限制,以允許從域調用web服務。
除非您考慮Windows身份驗證(因爲請求來自您的域),否則通過防火牆執行此操作的首選方式將處於不同的級別。在該級別,您可以將傳入流量限制爲已知的一組IP地址。這隻會走得這麼遠,因爲IP可能被欺騙,但這是一個開放的服務,所以你去了。一個更好的替代方案是兩個防火牆和Windows身份驗證。
或者,您可以通過查詢OperationContext.Current.IncomingMessageProperties
來檢查WCF中的客戶端IP地址。
如果您的所有合法用戶都應該在您的企業內部LAN上(在同一子網上),那麼您可以使用類似this的方法通過IP地址將其鎖定。如果你願意的話,你也可以將它固定在幾個特定的IP掩碼上。
但是,如果您想允許合法用戶從任何地方打它,那麼這不是一個好方法。在這種情況下,認證會更好。
儘管如此,我認爲如果用戶具有與域用戶相同的用戶名和密碼(不太可能,我知道),那麼他們將被認證爲域用戶。 – 2009-12-14 16:48:59
不,他們不會 - 他們需要擁有真正的Windows憑據 - 來自您的域的Windows安全令牌 - 不僅僅是偶然的同名。 – 2009-12-14 17:18:51
那麼你如何解釋表格中的第三列: http://msdn.microsoft.com/en-us/library/ms164725.aspx – 2009-12-14 17:32:54