我是WCF /安全新手。我創建了一個通過Windows服務託管的WCF服務。 WCF服務從通過Windows身份驗證保護的第三方數據源獲取數據。我需要:WCF通過Windows服務 - 身份驗證客戶端
通過Windows服務通過客戶端的權限,通過WCF服務,併爲第三方數據源,或...
限制誰可以調用Windows服務/ WCF服務給特定AD組的成員。
有關如何執行這些任務的任何建議?
我是WCF /安全新手。我創建了一個通過Windows服務託管的WCF服務。 WCF服務從通過Windows身份驗證保護的第三方數據源獲取數據。我需要:WCF通過Windows服務 - 身份驗證客戶端
通過Windows服務通過客戶端的權限,通過WCF服務,併爲第三方數據源,或...
限制誰可以調用Windows服務/ WCF服務給特定AD組的成員。
有關如何執行這些任務的任何建議?
這是在企業內部網/企業防火牆情況下嗎?
如果是這樣,我會使用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>
謝謝!我現在遠離代碼,但會試一試。我正在使用netTcp,但我有一種感覺,我沒有正確配置傳輸安全性和Windows客戶端憑證,因爲wcf wervice正在使用主機憑證。明天/週一我會玩這個。這兩件事情的任何指針? – Sean 2010-04-11 01:27:20