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>
誰かがこれを正しく設定する方法を知っていますか? (可能なら?)
いくつかの同僚を掘り下げて質問した後、最終的に問題を解決しました。
この場合、セキュリティには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"/>