web-dev-qa-db-ja.com

IISでbasichttpbinding、SSL、およびBasic認証のみを使用してWCFを使用するにはどうすればよいですか?

IIS BasicHttpBinding-bindingのみを使用して)でSSLと基本認証でWCFサービスをセットアップすることは可能ですか?(wsHttpBinding-bindingを使用できません)

サイトはIIS 7でホストされ、次の認証が設定されています。

   - Anonymous access: off
   - Basic authentication: on
   - Integrated Windows authentication: off !!

サービス構成:

<services>
  <service name="NameSpace.SomeService">
    <Host>
      <baseAddresses>
        <add baseAddress="https://hostname/SomeService/" />
      </baseAddresses>

    </Host>
    <!-- Service Endpoints -->
    <endpoint address="" binding="basicHttpBinding"
              bindingNamespace="http://hostname/SomeMethodName/1"
              contract="NameSpace.ISomeInterfaceService"
              name="Default"
                      />
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpsGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
      <exceptionShielding/>
    </behavior>
  </serviceBehaviors>
</behaviors>

2つの異なるエラーのある2種類のバインディングを試しました。

1-IISエラー: 'バインディングBasicHttpBindingを使用するエンドポイントのスキームhttpに一致するベースアドレスが見つかりませんでした。登録されているベースアドレススキームは[https]です。

<bindings>
  <basicHttpBinding>
    <binding>
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Basic"/>
      </security>
    </binding>
  </basicHttpBinding>

</bindings>

2-IISエラー:このサービスのセキュリティ設定には「匿名」認証が必要ですが、IISこのサービスをホストするアプリケーションでは有効ではありません。

<bindings>
  <basicHttpBinding>
    <binding>
      <security mode="Transport">
        <transport clientCredentialType="Basic"/>
      </security>
    </binding>
  </basicHttpBinding>

</bindings>

誰かがこれを正しく設定する方法を知っていますか? (可能なら?)

20
Tim

いくつかの同僚を掘り下げて質問した後、最終的に問題を解決しました。

この場合、セキュリティには2つの側面があります。 IISセキュリティおよびWCFセキュリティ。

IISセキュリティ: SSLを有効にし、基本認証を有効にします。匿名認証を無効にします。 (もちろん、Windowsアカウント/グループを作成し、IISでアプリケーションの権限を設定します。)

WCFセキュリティ:バインディングはBasicHttpBindingのみであるため、サービスは何も有効にする必要がありません。 IISがこれを担当します。

サービスのバインディング構成:

<bindings>
  <basicHttpBinding>
     <binding>
        <security mode="Transport">
           <transport clientCredentialType="Basic" />
        </security>
     </binding>
  </basicHttpBinding>

最後に、最初のエラーを解決するために、mexエンドポイントを削除しました。このエンドポイントにはHTTPバインディングが必要です。

削除済み:

<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
24
Tim