这种情况
我们正在对一些WCF服务实现不同类型的安全性。 ClientCertificate,用户名和密码和匿名。
我们有2个ServiceBehaviorConfigurations,一个用于httpBinding,一个用于的wsHttpBinding。 ( 我们有基于要求定制的安全授权策略 )作为一项要求,我们需要为每个服务不同的端点。 3个端点与httpBinding和1的wsHttpBinding。
例如,对于一个服务:
- basicHttpBinding的:匿名
- basicHttpBinding的:UserNameAndPassword
- basicHttpBinding的:BasicSsl
- 的wsHttpBinding:BasicSsl
注意:我们在.NET 3.5工作
问题
第1部分:我们不能与wsHttp服务配置指定相同的服务两次,一次与HTTP服务配置和一次。
第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>
我们怎么可以指定在WsHttpBinding的端点不同的服务行为? 或者,我们如何能够运用我们的授权策略,以不同的方式进行,然后WsHttpBinding的basicHttpBinding的。 我们将使用端点的行为,但我们不能确定在端点的行为我们的授权策略