Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 为受SSL保护的WSIT/Metro web服务和客户端设置身份验证_Wcf_Web Services_Ssl_Wsit - Fatal编程技术网

Wcf 为受SSL保护的WSIT/Metro web服务和客户端设置身份验证

Wcf 为受SSL保护的WSIT/Metro web服务和客户端设置身份验证,wcf,web-services,ssl,wsit,Wcf,Web Services,Ssl,Wsit,对于为受SSL保护的服务设置标准身份验证,我有点困惑。我已经试过了,但那不是标准的,WS-I对我来说很重要。可以在方法级别将身份验证令牌设置为用户名。这是WSIT XML中的结果BindingPolicy: <wsp:Policy wsu:Id="DataStoreWSPortBindingPolicy"> <wsp:ExactlyOne> <wsp:All> <wsam:Addressing wsp:Op

对于为受SSL保护的服务设置标准身份验证,我有点困惑。我已经试过了,但那不是标准的,WS-I对我来说很重要。可以在方法级别将
身份验证令牌
设置为
用户名
。这是WSIT XML中的结果
BindingPolicy

<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>    -->


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

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

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


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

谢谢你给我指路。在这里使用术语“WS-I”是不合适的,但我的意思是,我希望通过实现“最”的标准方式来最大限度地提高互操作性。我希望我可以在服务级别设置一些东西,但是我必须在服务器上设置HTTP基本身份验证。此外,我正在使用一个对象数据库,因此我必须为GlassFish创建一个自定义域,以使其正常工作。对于一个如此简单的特性来说,这是一种开发开销。