2

イントラネットに管理 Web サイトがあり、現在IIS による統合 Windows 認証を使用しています。このアプリケーションを公開 Web サイトに移動し、SSL で保護して、ユーザーがどこからでもアクセスできるようにしたいと考えています。

HttpModule を使用して http から https にリダイレクトすることを計画していましたが、これは統合認証では機能しないようです (リダイレクトの前にログイン ポップアップが表示されます)。

IIS で「SSL を要求する」チェックボックスを使用して行き詰まっていますか? ユーザーが https URL を使用するのを忘れた場合、穏やかなリダイレクトではなく、ファットなエラー ページが表示されるため、これはユーザー フレンドリーとは言えません。

この状況であなたはどうしますか?

4

2 に答える 2

6

コードの問題ではなく、毎回IISの問題としてこれを解決しました:

  • IIS で新しい Web サイトを作成する
  • それを同じ IP アドレス (および/またはホスト ヘッダー)、SSL 証明書、およびポート 443 にバインドします。
  • 現在のポート 80 サイトと同じアプリケーション ルートを指すようにこれを構成します。
  • https://siteに直接接続すると期待どおりの応答が返されることを確認するテスト
  • 元のサイト (まだポート 80 にバインドされている) を再構成して、HTTP リダイレクト機能を使用する
  • ポート 80 サイトをポート 443 サイトにリダイレクトするように構成します。オプションで、アプリケーションと仮想ディレクトリのマッピングを削除します (誰かが誤ってリダイレクトを無効にした場合)

それ以降、ユーザーは Web サイトのアドレスをブラウザーに入力するだけで、IIS から超高速のリダイレクト メッセージを受け取り、SSL で保護されたバージョンのサイトに送信されます。

于 2010-10-27T18:59:39.020 に答える
3

イントラネットサイトでも同様の問題が発生し、統合Windows認証からサイトで直接ネットワークユーザー名/パスワードを要求するようになりました。そうすれば、認証ポップアップがいつ表示されるかを気にすることなく、HTTPSなどにリダイレクトできます。

これに似たコード(ASP.NETを使用していると仮定)があり、ユーザーを認証してから、認証状態をCookieに保存します。

public static bool AuthenticateUser(string username, string password)
{
    System.DirectoryServices.DirectoryEntry _entry = new System.DirectoryServices.DirectoryEntry(ldap_path, username, password, System.DirectoryServices.AuthenticationTypes.Delegation);

    bool _authenticated = false;
    try
    {
        Object _o = _entry.NativeObject;
        _authenticated = true;
    }
    catch
    {
        _authenticated = false;
    }
    finally
    {
        // Avoids the "multiple connections to server not allowed" error.
        _entry.Close();
        _entry.Dispose();
    }

    return _authenticated;
}

IISに依存するのではなく、アプリケーションですべての認証を処理することで、頭痛やフラストレーションを大幅に軽減することができました。

于 2009-10-21T20:14:47.087 に答える