1

basicHTTP バインディングを使用する WCF サービスがあります。このサービスは、IIS 7.0 を実行している Windows Server 2008 64 ビット上の DMZ 環境で運用され、Active Directory ドメインには配置されません。

このサービスは、ビジネス パートナーが SSL で保護されたインターネット経由でアクセスします。当初、wsHTTPBinding で x.509 メッセージ認証を使用するサービスを構築していましたが、多くの問題を経てパントし、バックアップして、UserName 認証で basicHTTP を使用することにしました。

結果: 証明書モードで受け取ったものとまったく同じ、あいまいなエラー メッセージ。

サービスはまったく同じ認証を使用してドメイン内で完全に機能しますが、DMZ に移動するとすぐに次のエラーが表示されます。そして詳細」。

内部例外メッセージは、「メッセージのセキュリティを検証中にエラーが発生しました」です。

バインディング構成を含むサービスの Web 構成は次のとおりです。

  <services>
  <service behaviorConfiguration="HSSanoviaFacade.Service1Behavior" name="HSSanoviaFacade.HSSanoviaFacade">
    <endpoint address="" binding="basicHttpBinding" contract="HSSanoviaFacade.IHSSanoviaFacade" bindingConfiguration="basicHttp">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="https://FULLY QUALIFIED HOST NAME CHANGED TO PROTECT/>
      </baseAddresses>
    </host>
  </service>
</services>
<bindings>
  <basicHttpBinding>
    <binding name="basicHttp">
      <security mode="TransportWithMessageCredential">
    <message clientCredentialType="UserName" />
    </security>
     </binding>
  </basicHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="HSSanoviaFacade.Service1Behavior">
     <serviceMetadata httpsGetEnabled="True" />
      <serviceDebug includeExceptionDetailInFaults="True" />
    </behavior>
  </serviceBehaviors>
</behaviors>

エラーが発生するテスト クライアントの構成:

    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IHSSanoviaFacade" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="TransportWithMessageCredential">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
     <client>
        <endpoint address="https://HOST NAME CHANGED TO PROTECT"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHSSanoviaFacade"
            contract="MembersService.IHSSanoviaFacade" name="BasicHttpBinding_IHSSanoviaFacade" />
    </client>

前述のように、サービスはドメイン上で完全に機能し、運用 IIS ボックスはドメイン上にありません。私は今、2週間髪を微調整して引っ張っていますが、何もうまくいかないようです. 誰かが助けてくれれば幸いです。認証の回避策の推奨事項でもあります。カスタム認証スキームを使用するのではなく、組み込みの SOAP 機能を使用したいと考えています。

資格情報はプロキシ経由で渡されます。つまり、proxy.ClientCredentials.UserName.UserName と proxy.ClientCredentials.UserName.Password は、テスト環境の内部ドメインと DMZ IIS ボックスのマシン アカウントの両方で有効なアカウントです。

4

1 に答える 1

0

まあ、私が望んでいたものとは違うかもしれませんが、うまくいきました。ドメイン内の IIS とそうでない IIS の違いである必要があります。

サービスの Web 構成に対する私の変更は次のとおりです。

<security mode="Transport">
  <transport clientCredentialType="Basic" />
</security>

私が理解しているように、これはSOAPヘッダーではなくHTTPヘッダーで資格情報を渡します。つまり、このシナリオではメッセージレベルのセキュリティが機能しません。そのすべてが SSL 証明書によって保護されています。

于 2009-11-03T19:09:26.803 に答える