【发布时间】:2012-08-30 22:53:19
【问题描述】:
情况
我们正在对某些 WCF 服务实施不同类型的安全性。 ClientCertificate、用户名和密码以及匿名。
我们有 2 个 ServiceBehaviorConfiguration,一个用于 httpBinding,一个用于 wsHttpBinding。 (我们有针对基于声明的安全性的自定义授权策略) 作为要求,我们需要为每个服务提供不同的端点。 3 个端点使用 httpBinding,1 个端点使用 wsHttpBinding。
一项服务的示例:
- basicHttpBinding:匿名
- basicHttpBinding:用户名和密码
- 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>
我们如何在 WsHttpBinding 端点上指定不同的服务行为? 或者我们如何以不同的方式将我们的授权策略应用于 wsHttpBinding 和 basicHttpBinding。我们将使用端点行为,但我们无法在端点行为上指定我们的授权策略
【问题讨论】:
标签: wcf claims-based-identity servicebehavior endpointbehavior