我們正試圖創建一個WCF服務,該服務只能被指定的Windows組訪問。 如何在服務器web.config和客戶端配置中配置?WCF服務不帶SSL,但帶有Windows組認證
注意:我們希望能夠控制允許在服務器web.config中訪問但不在代碼中的Windows組。另外,我們根本不需要SSL。
伊夫用Google搜索周圍,然後我能找到都是這樣最好的例子...
WCF Service, Windows Authentication
但是,這並不說明如何限制訪問僅向特定的羣體或團體。
我們正試圖創建一個WCF服務,該服務只能被指定的Windows組訪問。 如何在服務器web.config和客戶端配置中配置?WCF服務不帶SSL,但帶有Windows組認證
注意:我們希望能夠控制允許在服務器web.config中訪問但不在代碼中的Windows組。另外,我們根本不需要SSL。
伊夫用Google搜索周圍,然後我能找到都是這樣最好的例子...
WCF Service, Windows Authentication
但是,這並不說明如何限制訪問僅向特定的羣體或團體。
好的,這是我們想出的解決方案。雖然它確實涉及代碼更改(添加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>
如果這是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
}
感謝jlp,這很有幫助,但我們真的想要控制在配置文件中有權訪問的組/角色,而不是硬編碼到代碼中的PrincipalPermission屬性中。我們現在想出了一個解決方案,我會寫出作爲替代方案的解決方案,以便讓其他人受益。謝謝 – barrylloyd
你爲什麼不希望SS L·我知道有一些合理的原因,但你應該說明他們 – Seph
好吧,這是一個很好的問題。基本上這是一個Intranet應用程序,公司不希望在客戶機上維護SSL證書的開銷/成本。如果這個問題只能通過SSL解決,那麼我們可能不得不重新考慮這一點 - 但我希望我們可以避免它。 – barrylloyd
您使用哪種綁定? –