2011-07-20 19 views
10

現在、エクストラネットユーザーにログインしてフォーム認証を使用して認証する必要があるMVC3 Webアプリケーションを開発中です。イントラネットユーザーは、Windows認証を使用して自動的にログインする必要があります。
私はこの記事を見つけました。 http://aspalliance.com/553_Mixed_Mode_Authentication.all ですが、2004年11月であり、7年以上前に書かれたものを見つけるのが好きです。ASP.NET複合フォーム/ Windows認証

仮想ディレクトリが同じ物理ディレクトリを指していて、匿名アクセスが許可され、もう一方が匿名アクセスを許可する2つのアプリケーションをIISに持つことです。

ユーザーが物事のWindows /イントラネット側で認証された場合、フォーム認証を使用してログインしているユーザーを単純にシミュレートすることを望みます。このアプローチに落とし穴がありますか?どんな良いアイデアですか?

編集:私は私の古い記事で提案されている事柄の多くを行うことができませんIIS7を使用しています2011年7月22日

。 IIS7とASP.NET Webサイトの間では認証が少し強化されているため、特定のことは許可されていません。たとえば、アプリケーションの残りの部分がフォーム認証を使用している間は、Windows Authを1つのファイルに設定することはできません。

+0

フォームを使用してログインしているユーザーをどのようにシミュレートする予定ですか? ASPメンバーシップテーブルにユーザーを作成しようとしていますか? – Erix

+0

はい。各Windowsユーザーには、aspメンバーシップのユーザーに対応するロール(Windowsのグループ)があります。したがって、それらがWindowsの管理グループに含まれている場合は、Formsの管理ユーザーとしてログインします。 Windowsユーザーの場合、ASPメンバーシップテーブルには、1対1の関係(ユーザー対役割)を持つユーザーと同じ数の役割しか存在しません。 –

答えて

3

ここで最善のアプローチは、最初のアプリケーションがWindows認証を使用し、HTTPパイプラインのPostAuthenticateイベントへのフックのみで構成されている2つのアプリケーションを持つことではないかと思います。ユーザーが認証されている場合は、フォームチケットを与え、フォーム認証を使用する対象アプリApp2にリダイレクトします。クッキーがパス固有ではなく、2つのアプリケーションが同じサーバーに存在する(または暗号化キーがweb.configで同期されている)ことに注意してください。ユーザーが認証されていない場合は、認証チケットなしでリダイレクトし、App2に到着するとログインします。

のApp1:www.myUrl.com \ MyAppの

これは(Professional ASP.NET 2.0 Security, Membership, and Role Managementを参照)アプリのための "公共" のURLであるとPostAuthenticateイベントにフックしてネットワークユーザを検出します。

//Hook PostAuthenticateRequest inside of global.asax 
void Application_PostAuthenticateRequest(Object sender, EventArgs e) 
{ 
    IPrincipal p = HttpContext.Current.User; 

    if (p.Identity.IsAuthenticated) 
    { 
     // to do: give them a non-path specific ticket and redirect to App2 
    } 
} 

App2:www.myUrl.com \ MyApp2

これは実際のアプリケーションです。ネットワークユーザーがApp1から到着すると、既にフォームチケットが作成されます。ネットワーク以外のユーザーが到着すると、login.aspxにリダイレクトされます。

注: ネットワークユーザーがApp2にブックマークを付けると、1つの欠点があります。私はこれをどのように回避するかについてはあまりよく分かりません。クッキーの有効期限が切れていない場合は、それほど問題にはなりません。 1つのオプションは、ログインページにリンクを張って、「私はすでにネットワークユーザーです - ログインして自動的にログインしてください」というようなものです。ログインするとApp1に戻るでしょうか?

フォームチケットの発行を支援するコードがあります。私は時間があるように答えを更新します。

異なる役割のプロバイダを処理するには、App2でファンシーな役割管理フットワークを行う必要があることに注意してください。上記のAmazonのリファレンスは古くなっていますが、これらの種類のカスタム認証と認可の問題にぶつかると、私は自分自身を常に参照しています。

+0

Brettの入力をありがとう。ネットワークユーザーのログインは重要ではありませんが、クライアントが望むものです。この機能を実装する必要があるときは、自分のものを含め、自分のオプションを引き続き検討します。 –

+0

私はかなりこのルートを行った。克服するには多くの障害がありましたが、ほとんどの場合に機能します。 Windows Authサイト(Site1)のURLをローカルイントラネットサイトドメインに追加して、ユーザーが自動的にログインし、Site2にリダイレクトされるようにしました。 –

0

IISで2つの異なるアプリケーションを作成して、ジョブが完了すれば、これは完全に可能です! =)

+0

IIS7ではありません。 IIS7のアプリケーションをフォームからWindows認証に、またはその逆に変更すると、プロジェクトのWebConfigが変更されます。私は2つのアプリケーションを持っていますが、どちらもファイル上の同じ物理ディレクトリを指しています。あるアプリケーションで認証タイプを変更すると、他のアプリケーションに影響します。 –

関連する問題