2010-04-10 152 views
3

我是WCF /安全新手。我創建了一個通過Windows服務託管的WCF服務。 WCF服務從通過Windows身份驗證保護的第三方數據源獲取數據。我需要:WCF通過Windows服務 - 身份驗證客戶端

  1. 通過Windows服務通過客戶端的權限,通過WCF服務,併爲第三方數據源,或...

  2. 限制誰可以調用Windows服務/ WCF服務給特定AD組的成員。

有關如何執行這些任務的任何建議?

回答

5

這是在企業內部網/企業防火牆情況下嗎?

如果是這樣,我會使用netTcp綁定(在這種情況下最快)與傳輸安全和Windows客戶端憑據。在這種情況下,調用者的Windows憑據將被傳遞到您的WCF服務中。

使用標準的基於角色的安全性,則可以限制主叫方利用主權限來決定服務的方法 - 你可以聲明限制誰可以這樣調用一個方法:

[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")] 
[PrincipalPermission(SecurityAction.Demand, Name = "JohnDoe")] 
public void YourSensitiveMethod(); 

,或者您可以通過編程您在您的服務方法WindowsIdentity的存及其做任何你想用它做:

if(ServiceSecurityContext.Current.WindowsIdentity != null) 
{ 
    WindowsPrincipal principal = new WindowsPrincipal(ServiceSecurityContext.Current.WindowsIdentity); 
    if(!principal.IsInRole("Administrators") 
    { 
     return; // or throw a FaultEXception or something 
    } 
} 

是否幫助呢?

更新:與WCF和安全相關的所有事物的最終資源將是Codeplex上的WCF Security Guidance。你應該在這個頁面上找到關於任何東西的樣本和方法(以及關於它們的解釋!)。

對於交通運輸的安全性和Windows身份驗證確保一個NetTcpBinding的作爲客戶端憑證,使用此綁定配置:

<bindings> 
    <netTcpBinding> 
    <binding name="SecuredByWindows"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Windows"/> 
     </security> 
    </binding> 
    </netTcpBinding> 
</bindings> 
+0

謝謝!我現在遠離代碼,但會試一試。我正在使用netTcp,但我有一種感覺,我沒有正確配置傳輸安全性和Windows客戶端憑證,因爲wcf wervice正在使用主機憑證。明天/週一我會玩這個。這兩件事情的任何指針? – Sean 2010-04-11 01:27:20