Ситуация
Мы реализуем различные виды безопасности для некоторых служб WCF. ClientCertificate, UserName & Password и Anonymous.
У нас есть 2 ServiceBehaviorConfigurations, один для httpBinding и один для wsHttpBinding. (У нас есть настраиваемые политики авторизации для безопасности на основе утверждений) В качестве требования нам нужны разные конечные точки для каждой службы. 3 конечные точки с httpBinding и 1 с wsHttpBinding.
Пример для одной услуги:
- basicHttpBinding: Анонимный
- basicHttpBinding: UserNameAndPassword
- basicHttpBinding: BasicSsl
- wsHttpBinding: BasicSsl
Примечание: мы работаем над .NET 3.5
Проблема
Часть 1. Мы не можем указать одну и ту же службу дважды, один раз с конфигурацией службы http и один раз с конфигурацией службы wsHttp.
Часть 2. Мы не можем указать поведение службы на конечной точке. (Броски и исключение, поведение конечной точки не обнаружено ... Поведение службы не может быть настроено на поведение конечной точки)
Конфигурация
По части 1:
<services>
<service name="Namespace.MyService" behaviorConfiguration="securityBehavior">
<endpoint address="http://server:94/MyService.svc/Anonymous" contract="Namespace.IMyService" binding="basicHttpBinding" bindingConfiguration="Anonymous">
</endpoint>
<endpoint address="http://server:94/MyService.svc/UserNameAndPassword" contract="Namespace.IMyService" binding="basicHttpBinding" bindingConfiguration="UserNameAndPassword">
</endpoint>
<endpoint address="https://server/MyService.svc/BasicSsl" contract="Namespace.IMyService" binding="basicHttpBinding" bindingConfiguration="BasicSecured">
</endpoint>
</service>
<service name="Namespace.MyService" behaviorConfiguration="wsHttpCertificateBehavior">
<endpoint address="https://server/MyService.svc/ClientCert" contract="Namespace.IMyService" binding="wsHttpBinding" bindingConfiguration="ClientCert"/>
</service>
</services>
Конфигурация поведения службы:
<serviceBehaviors>
<behavior name="securityBehavior">
<serviceAuthorization serviceAuthorizationManagerType="Namespace.AdamAuthorizationManager,Assembly">
<authorizationPolicies>
<add policyType="Namespace.AdamAuthorizationManager,Assembly" />
</authorizationPolicies>
</serviceAuthorization>
</behavior>
<behavior name="wsHttpCertificateBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
<serviceAuthorization serviceAuthorizationManagerType="Namespace.AdamAuthorizationManager,Assembly">
<authorizationPolicies>
<add policyType="Namespace.AdamAuthorizationManager,Assembly" />
</authorizationPolicies>
</serviceAuthorization>
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck"/>
</clientCertificate>
<serviceCertificate findValue="CN=CertSubject"/>
</serviceCredentials>
</behavior>
How can we specify a different service behaviour on the WsHttpBinding endpoint? Or how can we apply our authorization policy in a different way for wsHttpBinding then basicHttpBinding. We would use endpoint behavior but we can't specify our authorization policy on an endpoint behavior