14

複数の形式の認証を必要とするアプリケーションを作成中です。

アプリケーションは Active Directory への認証をサポートする必要がありますが、ユーザーが Active Directory にいない場合は SQL メンバーシップ プロバイダーにフェールバックできる必要があります。ユーザー名は Active Directory ユーザー名とは異なる形式になるため、提供されたユーザー名に基づいてコードで SQL プロバイダーへの失敗を処理できます。

これは可能ですか?つまり、メンバーシップを使用して、ActiveDirectoryMembershipProvider と SqlMembershipProvider の両方を一緒に使用できますか、それとも自分で作成する必要がありますか?

もう 1 つの追加の複雑さは、Windows 認証に基づいて内部ユーザーを AD に自動的に認証したいが、内部ネットワークにないユーザー、または SQL プロバイダーを使用しているユーザーにはフォーム認証を使用したいということです。

これらはおそらく別のサーバーであり、1 つは内部、もう 1 つは外部であるため、データの複製を把握するために多くの計画を立て、AD ユーザーが外部サーバーにアクセスした場合にどのように認証するかなどを検討しています。

この道を歩き始めるとき、そこにはどんな考えがあるのだろうと思っています。私がやりたいことは、私が自分自身を転がさなくても可能ですか、またはこれらを噛み合わせる方法はありますか?


返信いただきありがとうございます。

私が最初に尋ねた理由は、約 7 年前に IIS を使用して認証し、資格情報を Lotus Domino Server Web App に戻すことで、この特定のセネリオを機能させることができたからです。ユーザーが Windows 認証/ISS を介して認証されなかった場合、Domino が認証を処理します。これは私がここでやろうとしていたことでしたが、実際には IIS で機能させる方法が思いつきませんでした。

あなたの返信の残りの部分については、あなたは私が取るべき道を進んでいると思います。私はこれを熟考し、頭の中で何度も投げました。とにかく、外部サーバー上のデータへのアクセスが制限されるため、アプリケーションは 2 つのサーバー上で多少異なります。すでに多くのことが異なるという事実は、これらを 2 つのアプリケーションとして扱うことで、同じアプリケーションで 2 種類の認証を使用する必要性をなくすことができます。

外部サーバー用に独自の認証/ログインウィンドウを作成するというアイデアを既に試しています。ユーザーが外部サーバーで AD 資格情報を使用してログインしようとすると、それを検出して内部にリダイレクトできます。サーバ。ローカル ネットワークまたは VPN に接続されていない場合は、単にアクセスできません。この部分にはまだいくつかの思考プロセスが必要なので、よくわかりません。

追加の考えとして、セキュリティ上の問題を発生させずに、AD 資格情報を使用して外部サーバーから SQL データベースに対してユーザーを認証できるようにするために、SQL データベースに十分な量の AD をプルする方法はありますか? 私が考えていることを明確に入力していることを願っています....

再度、感謝します!

ティム

4

3 に答える 3

8

これは、この情報に基づいて同様の状況を処理した方法です。

  1. フォーム認証を使用するようにアプリケーションを構成しました。
  2. LoginUrl を WinLogin.aspx というページに設定します。
  3. WinLogin.aspx で、Request.ServerVariables["LOGON_USER"] を使用してユーザー名を取得し、FormsAuthentication.RedirectFromLoginPage(authorizedUserName, false) を呼び出してログインします。この時点でも Active Directory を手動で確認できると思います。
  4. Login.aspx というページにリダイレクトする HTML ページを作成します。
  5. Login.aspx は、標準のユーザー名/パスワード ログインです。
  6. IIS では、サイト全体で統合認証と匿名を有効にしますが、WinLogin.aspx への匿名アクセスは拒否します。
  7. IIS で、手順 3 で作成したページに 401 エラーを設定します。

基本的には、認証されていないユーザーがサイトにアクセスすると、WinLogin.aspx にリダイレクトされます。匿名がオフになっているため、統合セキュリティがチェックを行います。これに合格すると、WinLogin のカスタム コードを実行できます。統合セキュリティ チェックが失敗すると、401 エラーが発生します。カスタム 401 ページは Login.aspx にリダイレクトされ、ユーザーは SQL プロバイダーでユーザー名とパスワードを使用してログインできます。

于 2008-11-21T22:39:44.647 に答える
2

私の知る限り、Web アプリケーションは Windows 認証またはフォーム認証のいずれかを使用するように構成されていますが、両方を使用することはできません。したがって、他のユーザーにユーザー名/パスワードの入力を要求しながら、内部ユーザーを自動的に認証することはできないと思います。

カスタム プロバイダーを使用することで、フォーム認証を介して Active Directory または SQL ユーザー ストアに対して認証を行うことができます。ただし、AD ユーザーは引き続きユーザー名とパスワードを入力する必要があります。この 2 つの方法を組み合わせたことはありませんが、フォーム認証を使用して両方のソースに対して一度に認証を行ったことはあります。

そうは言っても、システムの「柔軟性」を減らすことを検討したいと思うかもしれません。外部に面したサーバーと内部に面したサーバーがある場合は、アプリケーションの各コピーのプロバイダー構成を変更して、別のソースに対応させることができます。次に、Windows (自動) 認証を使用するように内部のものを構成し、フォーム認証を使用するように外部のものを構成できます。

私見ですが、内部ユーザーが外部サーバーを使用してアプリケーションにアクセスするべきではないと思います。その場合、AD アカウントとは完全に分離されたユーザー アカウントを SQL に格納する必要があります。基本的に、誰かが外部からアプリケーションにアクセスすると、物理的な場所に関係なく、外部ユーザーとして行動します。

于 2008-11-21T19:28:35.313 に答える
2

ActiveDirectoryMembershipProvider と SqlMembershipProvider を使用することは可能ですが、これにはログイン コントロールの代わりに独自のコードを使用してログオン ページを設計する必要があります。

混合認証 (Windows とフォーム) については、私の知る限り、IIS 7 だけが簡単でクリーンです。詳細については、この投稿を参照してください。

http://mvolo.com/blogs/serverside/archive/2008/02/11/IIS-7.0-Two_2D00_Level-Authentication-with-Forms-Authentication-and-Windows-Authentication.aspx

于 2008-11-23T12:23:20.273 に答える