ここで最善のアプローチは、最初のアプリケーションが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のリファレンスは古くなっていますが、これらの種類のカスタム認証と認可の問題にぶつかると、私は自分自身を常に参照しています。
フォームを使用してログインしているユーザーをどのようにシミュレートする予定ですか? ASPメンバーシップテーブルにユーザーを作成しようとしていますか? – Erix
はい。各Windowsユーザーには、aspメンバーシップのユーザーに対応するロール(Windowsのグループ)があります。したがって、それらがWindowsの管理グループに含まれている場合は、Formsの管理ユーザーとしてログインします。 Windowsユーザーの場合、ASPメンバーシップテーブルには、1対1の関係(ユーザー対役割)を持つユーザーと同じ数の役割しか存在しません。 –