0

我对为受 SSL 保护的服务设置标准身份验证感到困惑。我已经尝试过HTTP 标头方式,但那是非标准的,WS-I 对我来说很重要。可以将 设置Authentication TokenUsername方法级别。这是BindingPolicyWSIT XML 的结果:

<wsp:Policy wsu:Id="DataStoreWSPortBindingPolicy">
    <wsp:ExactlyOne>
        <wsp:All>
            <wsam:Addressing wsp:Optional="false"/>
            <sp:TransportBinding>
                <wsp:Policy>
                    <sp:TransportToken>
                        <wsp:Policy>
                            <sp:HttpsToken RequireClientCertificate="false"/>
                        </wsp:Policy>
                    </sp:TransportToken>
                    <sp:Layout>
                        <wsp:Policy>
                            <sp:Lax/>
                        </wsp:Policy>
                    </sp:Layout>
                    <sp:IncludeTimestamp/>
                    <sp:AlgorithmSuite>
                        <wsp:Policy>
                            <sp:Basic128/>
                        </wsp:Policy>
                    </sp:AlgorithmSuite>
                </wsp:Policy>
            </sp:TransportBinding>
            <sp:Wss10/>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>
<wsp:Policy wsu:Id="DataStoreWSPortBinding_hello_Input_Policy">
    <wsp:ExactlyOne>
        <wsp:All>
            <sp:SupportingTokens>
                <wsp:Policy>
                    <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
                        <wsp:Policy>
                            <sp:WssUsernameToken10/>
                        </wsp:Policy>
                    </sp:UsernameToken>
                </wsp:Policy>
            </sp:SupportingTokens>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>

SvcUtil 警告:

<!--    WsdlImporter encountered unrecognized policy assertions in ServiceDescription 'http://webServices/':    -->
          <!--    <wsdl:binding name='DataStoreWSPortBinding'>    -->
          <!--        <sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">..</sp:SupportingTokens>    -->

我想通过在 WCF 客户端中设置凭据,ClientCredentials然后通过数据库在服务端进行身份验证。实现这一目标的步骤是什么?

4

1 回答 1

1

如果您想在传输级别上采用标准方式,为什么不使用 HTTP Basic 身份验证?这是 HTTP 协议的通用标准化身份验证机制,它也适用于 Web 服务。

你得到的错误很可能是因为SupportingTokens断言。即使它是正确的断言 WCF 也不支持它。尝试使用SignedSupportingTokensSignedEncryptedSupportingTokens。如果您无法修改您的服务来生成这样的 WSDL,您甚至可以尝试修改您手动获得的 WSDL。

您所说的 WS-I 是什么意思?有多个 WS-I 标准,其中一些根本不期望策略 - 只是简单的 SOAP 服务,其中标头直接在 WSDL 中描述。

于 2011-10-04T10:12:55.850 回答