我使用带有绑定配置的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>
如何托管此服务以接受用户名和密码,而不是密码类型作为要求?
答案 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格式发送消息的基本功能,而您的客户端可以轻松地使用它,不是吗?