2012-05-15 74 views
1

我們正試圖創建一個WCF服務,該服務只能被指定的Windows組訪問。 如何在服務器web.config和客戶端配置中配置?WCF服務不帶SSL,但帶有Windows組認證

注意:我們希望能夠控制允許在服務器web.config中訪問但不在代碼中的Windows組。另外,我們根本不需要SSL。

伊夫用Google搜索周圍,然後我能找到都是這樣最好的例子...

WCF Service, Windows Authentication

但是,這並不說明如何限制訪問僅向特定的羣體或團體。

+0

你爲什麼不希望SS L·我知道有一些合理的原因,但你應該說明他們 – Seph

+0

好吧,這是一個很好的問題。基本上這是一個Intranet應用程序,公司不希望在客戶機上維護SSL證書的開銷/成本。如果這個問題只能通過SSL解決,那麼我們可能不得不重新考慮這一點 - 但我希望我們可以避免它。 – barrylloyd

+0

您使用哪種綁定? –

回答

0

好的,這是我們想出的解決方案。雖然它確實涉及代碼更改(添加AspNetCompatibilityRequirements屬性),但現在我們可以在web.config文件中實現組/角色的配置,而不是硬編碼。

有一些步驟來此...

1)添加aspNetCompatibilityEnabled屬性到serviceHostingEnvironment元素,設置爲true,如...

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

這告訴WCF服務在ASP.NET兼容模式下運行並完全參與ASP.NET HTTP請求生命週期。有關完整的詳細信息,請參閱this MSDN article

2)在WCF代碼添加AspNetCompatibilityRequirements屬性到服務類按照上述的鏈接和作爲this MSDN article指定...

<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> 

3)現在我們可以添加通常的ASP 授權元素來限制訪問指定的組/用戶(無設置(1)和(2)以上,這將是通過WCF忽略)...

<system.web> 
    <authorization> 
     <allow roles="MYDOMAIN\WCFAuthenticatedUsers" /> <-- allows access to users in this group 
     <deny users="*" /> <-- denies access to all other users 
    </authorization> 
</system.web> 
1

如果這是Intranet應用程序,你可以使用NetTcpBinding的:

<services> 
    <service name="YourService" 
     behaviorConfiguration="YourServiceBehavior"> 
     <endpoint 
     binding="netTcpBinding" 
     bindingConfiguration="SecureTransportWindows" 
     contract="YourContract" /> 
    </service> 
</services> 

<bindings> 
    <binding name="SecureTransportWindows"> 
     <security mode="Transport"> 
      <transport clientCredentialType="Windows" /> 
     </security> 
    </binding> 
</bindings> 

<behaviors> 
    <serviceBehaviors> 
     <behavior name="YourServiceBehavior">   
      <serviceAuthorization principalPermissionMode="UseWindowsGroups" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviours> 

然後在服務代碼,你可以要求窗口作用:

class YourService : YourContract 
{ 
    [PrincipalPermission(SecurityAction.Demand, Role="MYDOMAIN\Administrators")] 
    public string SecuredOperation(string name) 
    { 
     return "secured operation"; 
    } 
} 

如果您需要設置它的配置,那麼你必須實現自定義授權:

<behavior name="YourServiceBehavior">   
    <serviceAuthorization principalPermissionMode="Custom">    
     <authorizationPolicies> 
     <add policyType="YourCustomAuthorizationPolicy"/> 
     </authorizationPolicies>   
    </serviceAuthorization> 
</behavior> 

而在代碼中實現IAuthorizationPolicy接口王牌:

public class YourCustomAuthorizationPolicy : IAuthorizationPolicy 
{ 
    //you need to check msdn 
} 
+0

感謝jlp,這很有幫助,但我們真的想要控制在配置文件中有權訪問的組/角色,而不是硬編碼到代碼中的PrincipalPermission屬性中。我們現在想出了一個解決方案,我會寫出作爲替代方案的解決方案,以便讓其他人受益。謝謝 – barrylloyd