使用UsernamePasswordValidator保护HTTP绑定时保持MEX绑定不安全?

时间:2009-06-24 14:21:23

标签: c# .net wcf wcf-security

我们正在使用UsernamePasswordValidator和证书来保护对我们的WCF服务的访问。

但是,我们使用的自定义授权策略是SERVICE行为,而不是端点行为,因此它们适用于所有端点,包括MEX端点。我们希望能够使用visual studio获取服务引用,而不必每次都注释掉服务行为,但由于mex和wshttp端点都是安全的,因此在执行“添加服务引用”时会出错..“

有什么方法吗?

2 个答案:

答案 0 :(得分:1)

你在两者上使用相同的绑定吗?如果是这样,请尝试2个单独的绑定 - 一个用于mex端点,另一个用于wshttp:

所以对于服务 - 例如:

<wsHttpBinding><binding name="wsHttpBindingMessageUname">
<security mode="Message">
    <message clientCredentialType="UserName" negotiateServiceCredential="true"
      establishSecurityContext="false" />
</security></binding></wsHttpBinding>

和mex端点(无安全性):

<customBinding><binding name="customMex">
<textMessageEncoding>
    <readerQuotas maxDepth="2147483647"
          maxStringContentLength="2147483647"
          maxArrayLength="2147483647"
          maxBytesPerRead="2147483647"
          maxNameTableCharCount="2147483647" />
</textMessageEncoding>
<httpTransport transferMode="Buffered"
               maxReceivedMessageSize="2147483647"
               maxBufferSize="2147483647"/></binding></customBinding>

服务端点将类似于:

<endpoint address="" behaviorConfiguration="Server.Services.DefaultEndpointBehavior"  binding="wsHttpBinding" bindingConfiguration="wsHttpBindingMessageUname" name="DefaultHttp" contract="Server.Services.IMyService" listenUriMode="Explicit" />
<endpoint address="mex" binding="customBinding" contract="IMetadataExchange" name="" bindingConfiguration="customMex" listenUriMode="Explicit" />

使用此设置,它不会为mex应用安全性,因此在尝试更新服务引用时不应该收到该消息。要么是这样,要么创建另一个使用不同凭据的安全绑定,即您计算机上的客户端证书。

以下MSDN帖子中有一个示例,可以在此blog上找到有关安全mex端点的更多信息。

答案 1 :(得分:0)

我认为他还从问题中注意到他正在使用服务行为,因此绑定配置不会有所作为,因为整个服务使用UserNamePassword Validator。

这里有两件事情可以想到。

删除显式mex绑定并添加服务行为

<serviceMetadata httpsGetEnabled="true" />

或保持mex绑定,并启用

<serviceMetadata httpGetEnabled="true" />
请求元数据时,

CustomUserNameValidator不会被执行, 因此,如果httpsgetenabled未启用,并且您在http上有mex绑定,则需要 httpGetenabled至少