我可以使用生成SupportingTokens策略的WCF创建服务吗?

时间:2014-02-03 16:04:39

标签: wcf soap wcf-security

我正在设置现有的WCF服务以满足一些客户端要求。 其中一个要求是对禁用了WS-Addressing的服务使用UserNameToken身份验证,并在WSDL上以“SupportingTokens”格式生成策略,如下所示。

 <wsp:Policy wsu:Id="wss_username_token_service_policy"
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
    xmlns="http://schemas.xmlsoap.org/ws/2004/09/policy"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <sp:SupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
            <wsp:Policy>
                <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                    <wsp:Policy>
                        <sp:WssUsernameToken10 />
                    </wsp:Policy>
                </sp:UsernameToken>
            </wsp:Policy>
        </sp:SupportingTokens>
    </wsp:Policy>

我尝试了很多配置,但总是得到一个标签“sp:SignedSupportingTokens”或者不是“sp:SupportingTokens”。


documentation似乎没有具体的内容。

Ladislav Mrnka在this post中表示,似乎不支持这种断言类型。

如果这是正确的,则无法使用WCF生成wsdl?

遵循绑定和行为配置。

结合:

<customBinding>        
        <binding name="httpsBinding" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <security authenticationMode="UserNameOverTransport" allowInsecureTransport="true"  />
             <mtomMessageEncoding messageVersion="Soap12" >
                 <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" 
                            maxBytesPerRead="2147483647" 
                            maxNameTableCharCount="2147483647" />              
             </mtomMessageEncoding>
          <httpsTransport maxReceivedMessageSize="2147483647" />          
        </binding>        
      </customBinding>

行为:

<behavior name="svcSslAndUserNamePasswordBehavior">
          <serviceMetadata httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceSecurityAudit auditLogLocation="Application" suppressAuditFailure="true" serviceAuthorizationAuditLevel="Failure" 
                                messageAuthenticationAuditLevel="Failure" />
          <serviceCredentials>

            <serviceCertificate findValue="certificateInfo" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
            <userNameAuthentication userNamePasswordValidationMode="Custom" 
                                    customUserNamePasswordValidatorType="UserManagement.UserNameValidator" />            
          </serviceCredentials>
        </behavior>

1 个答案:

答案 0 :(得分:3)

这取决于其他必需的政策。 WCF不支持普通的SupportingToken,但是如果您使用HTTPS和UserNameToken而没有其他特殊要求,则绑定应该起作用。它使用WSDL中的SignedSupportingToken生成策略,但由于没有其他消息安全性,并且因为使用了HTTPS,所以消息中没有签名但是&#34;签署了#34;要求将通过传输(HTTPS)来满足。