5

データセンターで実行されている asp.NET Web アプリケーションがあり、顧客はシングル サインオンでログオンする必要があります。IIS 統合セキュリティを使用できれば、これは非常に簡単です。しかし、これはできません。お客様のドメイン コントローラーへの信頼はありません。そして、私たちはウェブサイトを一般のインターネットで利用できるようにしたいと考えています。人々がクライアント ネットワーク内から接続している場合にのみ、自動的にログインする必要があります。

私たちが持っているのは、ドメイン アカウントのリストと、asp.net コードで LDAP を介して DC にクエリを実行する方法です。IIS で匿名アクセスが許可されている場合、IIS はブラウザーに資格情報を要求しません。したがって、アプリケーションはユーザーの資格情報を取得しません。

IIS が匿名要求を受け入れて、ブラウザに資格情報を強制的に送信させる (したがって、シングル サインオンを使用できるようにする) 方法はありますか。

アップデート:

401: 無許可、www-authenticate: NTLM ヘッダーを自分で送信してみました。次に何が起こるか (Fiddler が教えてくれたように)、IIS が完全な制御を取得し、要求のチェーン全体を処理します。さまざまなソースから理解しているように、IIS はユーザー名を取得し、チャレンジをブラウザーに送り返します。ブラウザーは暗号化された応答を返し、IIS はドメイン コントローラーに接続して、この応答でユーザーを認証します。

ただし、私のシナリオでは、IIS はクライアントとは異なる Windows ドメインにあり、ユーザーを認証する方法がありません。そのため、Windows 認証を有効にして別のサイトを構築することもできません。

今のところ、私が研究しているオプションを残さなければなりません:

  1. ホスティング ドメインとクライアント ドメイン間のドメイン信頼の作成 (IT 部門はこれに満足していません)
  2. NTML プロキシを使用して、IIS 認証要求をクライアントのドメイン コントローラーに転送します (LDAP 経由で接続できる VPN 接続があります)。
4

3 に答える 3

3

あなたが求めているのは、混合モード認証と呼ばれるものです。最近、Paul Glavichの2つのエントリポイントメカニズムを使用しましたが、完全に機能します。私はそれがこの問題の最もエレガントな解決策だと思います。

于 2008-09-17T22:43:14.417 に答える
0

これが簡単に機能するかどうかはわかりません。401 チャレンジがユーザー要求の帯域内で発生する基本的なものとは異なり (資格情報がヘッダーに表示されるなど)、NTLM ハンドシェイクは別のポートで行われ、アンマネージ コードによってスレッド コンテキストに強制されます。

VS2008 (またはリフレクター) で ASP.NET NTLM モジュールを分解して、資格情報を抽出するために何をするかを試してみましたか?

本当に答えではありません - 申し訳ありません...

于 2008-09-17T09:25:51.370 に答える
-1

このソリューションはフォーム認証に関するものですが、401の問題について詳しく説明しています。

解決策は、Global.asaxに次のように配置することで、アプリケーションのEndRequestイベントにハンドラーをアタッチすることでした。

protected void Application_EndRequest(object sender, EventArgs e) {
    if (Context.Items["Send401"] != null)
    {
         Response.StatusCode = 401;
         Response.StatusDescription = "Unauthorized";
    } }

次に、このコードをトリガーするために、あなたがしなければならないのは、

Context.Items["Send401"] = true;

編集:
ユーザーのドメイン資格情報を取得するために、匿名および統合をオンにしてこの方法を使用しました。それがあなたの状況でうまくいくかどうかはわかりませんが、私は一撃の価値があると思いました。

于 2008-09-17T15:48:08.003 に答える