3

作成したWCFサービスと通信するためにサードパーティのJavaクライアントを取得しようとしています。

メッセージを受信すると、次の例外が発生します。

'System.IdentityModel.Tokens.UserNameSecurityToken'トークンタイプのトークンオーセンティケーターが見つかりません。そのタイプのトークンは、現在のセキュリティ設定に従って受け入れることができません。

これが私の設定です:

バインディング

<customBinding>
    <binding name="TestSecureBinding">
        <security authenticationMode="MutualCertificate" />
        <textMessageEncoding messageVersion="Soap11WSAddressing10" />
        <httpsTransport requireClientCertificate="true" maxReceivedMessageSize="5242880" />
    </binding>
</customBinding>

行動:

  <serviceBehaviors>
    <behavior name="TestCertificateBehavior">
      <serviceCredentials>
        <clientCertificate>
          <certificate storeLocation="LocalMachine" x509FindType="FindBySubjectName" findValue="Test 01"/>
          <authentication certificateValidationMode="PeerTrust" trustedStoreLocation="LocalMachine" revocationMode="NoCheck"/>
        </clientCertificate>
        <serviceCertificate storeLocation="LocalMachine" x509FindType="FindBySubjectName" findValue="Test 01"/>
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>

終点:

  <service name="TestService"
           behaviorConfiguration="TestCertificateBehavior">
    <endpoint
      name="TestEndpoint"
      address="https://localhost:443"
      contract="TestServiceContract"
      binding="customBinding"
      bindingConfiguration="TestSecureBinding">
    </endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="https://localhost:443" />
      </baseAddresses>
    </host>

  </service>

誰かがこれを引き起こしているものを知っていますか?

4

3 に答える 3

6

証明書を参照する間違った方法がどこかで使用されているため、私が正しく覚えていれば、証明書を直接参照するか、キー識別子を使用します-とにかく、それを超えるには、allowSerializedSigningTokenOnReplyタグをセキュリティに追加できるはずですクライアントのバインディング構成にタグを付け、trueに設定します。

それはあなたのためにそれを超えるはずです-覚えておいてください、このクライアント側を置いてください

申し訳ありませんが、参考文献が見つかりません-どこかで読んだことを覚えていますが、今は見つかりません!: (****ここで編集****- http: //webservices20.blogspot.co.uk/2010/10/wcf-cannot-find-token-authenticator.html

<customBinding>  
<binding name="TestSecureBinding"> 
        <security allowSerializedSigningTokenOnReply="true" /> 
        etc
    </binding> 
<customBinding> 
于 2012-09-28T12:47:01.190 に答える
2

私は、構成ファイルでこれを行うことができないことを受け入れ、コードでサービスホストを作成することに頼りました。

これは、バインディング、バインディング要素、およびサービスホストの作成の完全な例です。

使用していない可能性があることに注意してくださいWSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005W-おそらく私が使用しなければならないよりも新しいバージョンを使用しています-しかし、それをあなたのサービスの正しいバージョンに置き換えてください。

var securityBindingElement = (AsymmetricSecurityBindingElement)SecurityBindingElement.CreateMutualCertificateBindingElement(MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10);
securityBindingElement.EndpointSupportingTokenParameters.Signed.Add(new UserNameSecurityTokenParameters());
securityBindingElement.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
securityBindingElement.IncludeTimestamp = true;
securityBindingElement.MessageProtectionOrder = System.ServiceModel.Security.MessageProtectionOrder.EncryptBeforeSign;

var customBinding = new CustomBinding();
customBinding.Elements.Add(securityBindingElement);
customBinding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11WSAddressing10, Encoding.UTF8));
customBinding.Elements.Add(new HttpsTransportBindingElement() { MaxReceivedMessageSize = 5242880 });

ServiceHost customServiceHost = new ServiceHost(type);
customServiceHost.AddServiceEndpoint(typeof(ITestServiceContract), customBinding, "https://localhost:443");
customServiceHost.Open();
于 2012-09-28T14:26:26.553 に答える
0

クライアントが呼び出しているエンドポイントアドレスを必ず確認してください。カスタムバインディングアドレスの補遺にタイプミスがあることに気付くまで、私たちはこれに非常に長い間取り組んできました。

于 2021-12-22T23:35:36.317 に答える