如何在WCF服务中删除WSS密码类型要求?

时间:2018-04-11 15:42:48

标签: c# wcf soap wcf-binding wcf-security

我使用带有绑定配置的basicHttpBinding构建了一个WCF服务,如下所示

      <basicHttpBinding>
        <binding name="basicHttpBinding">
          <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="None" proxyCredentialType="None"/>
            <message clientCredentialType="UserName"/>
          </security>
        </binding>
      </basicHttpBinding>

当我在IIS上托管此服务时,请在SoapUI中添加此项以进行测试,这会强制我将WSS-Password Type设置为PasswordText

此服务的使用者使用某种工具来访问服务方法声明,他们无法在其工具或语言中提供密码类型。 (超出主题)。

所以,我尝试了各种方法将安全模式设置为None,Message但没有任何效果。

我需要接收用户名和密码,因此非认证请求不是此处的要求。

<behavior name="customBehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom"
                                    customUserNamePasswordValidatorType="CustomServices.Library.UserValidator, CustomServices"/>
          </serviceCredentials>
        </behavior>

如何托管此服务以接受用户名和密码,而不是密码类型作为要求?

1 个答案:

答案 0 :(得分:1)

SOAP UI属性似乎只是构造了可以手动编写的相同SOAP元素。例如,在添加标题后,我的整个测试消息将如下所示:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
  <soapenv:Header>
     <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <wsse:UsernameToken wsu:Id="UsernameToken-12" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <wsse:Username>john1</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
        </wsse:UsernameToken>
     </wsse:Security>
   </soapenv:Header>
   <soapenv:Body>
      <tem:GetData>
         <tem:value>123</tem:value>
      </tem:GetData>
   </soapenv:Body>
</soapenv:Envelope>

Security标头传递上例中的所有用户凭据。 我认为它是在处理WCF服务时以SOAP格式发送消息的基本功能,而您的客户端可以轻松地使用它,不是吗?