web-dev-qa-db-ja.com

1つの特定のドメインバインディングに対してのみ基本認証を設定することは可能ですか?

1つのドメインバインディングに対してのみ基本認証を有効にし、残りはパブリックアクセス可能なままにしておきたいだけです。これはIISで可能ですか?

2
Tuan Anh Tran

Webサイトのバインディング情報は、着信要求がどのWebサイトにルーティングされるかを決定するために使用されます。 (Windowsアクティベーションサービスおよびhttp.sysによる)。

Webサイトごとに、サイト全体またはサイト内の特定のURLに対してさまざまな認証方法を有効にできますが、ホスト名には基づいていません。

少なくとも2つのオプションがあります。

オプション1は、同じ物理ディレクトリを指し、サイトルートで同じweb.configを使用する2つの別々のWebサイトを使用することです。

2つのサイトで異なる認証方法を使用できます。

ここでの欠点は、2セットのログファイルがあり、構成に対する特定の変更も2回実行する必要があることです。

オプション2には RL書き換えモジュール が含まれます

サイトnormal.serverfault.comsecure.serverfault.comにバインドされた2つのホスト名があると仮定します。

サイトルートの下に仮想ディレクトリsecureを作成しますが、サイト自体の同じ物理ディレクトリ(ルートと同じ)をポイントします。

仮想ディレクトリの場合、anonymousAuthenticationを無効にし、basicAuthenticationを有効にします。

次に、サイトに書き換えルールを追加します。

<rewrite>
  <rules>
      <rule name="Secure">
          <match url=".*" />
          <conditions>
              <add input="{SERVER_NAME}" pattern="^secure\.serverfault\.com$" />
          </conditions>
          <action type="Rewrite" url="/secure/{R:0}" />
      </rule>
  </rules>
</rewrite>

secure仮想ディレクトリを使用するようにすべてのリクエストを書き直していますが、ホスト名がsecure.serverfault.comの場合のみです。

これで、normal.serverfault.comを使用しているユーザーは認証なしでサイトにアクセスできますが、secure.serverfault.comを使用している場合はログインする必要があります。

このオプションで私が目にする問題の1つは、サイトのルートにあるweb.configが、書き換えられたリクエストに対して基本的に2回処理されることです。

物理的に1回しか存在しませんが、\secure\でリクエストを実行すると、仮想ディレクトリのローカルリクエストと見なされ、親ディレクトリのリクエストと見なされます。したがって、これをサポートしない設定がないことを確認する必要があります。たとえば、<add...ノードは複製できません。これを回避するには、<clear...または<remove...を使用する必要があります。または、設定をApplicationHost.configに移動します。

この設定でサイトをテストする必要がありますが、ブラウザはURLが書き換えられたことを認識しないため、正常に機能するはずです。

2
Peter Hahndorf