1

AD FS 2.0 サインイン ページは、小さな ASP.NET Web アプリケーション (.NET 2.0 を使用) であり、カスタマイズしてルック アンド フィールと機能を変更できます。(このようなカスタマイズは、Microsoft によって明示的に文書化されています。サインイン ページのカスタマイズとそのサブページを参照してください。)

複数の「ホーム レルム」(=「クレーム プロバイダー信頼」) があり、AD FS 2.0 が (別の「認証ハンドラー」ではなく) フォーム サインインを使用するシナリオがあります。

ページHomeRealmDiscovery.aspxがヒットすると、そのページは何らかの方法で (ユーザーに尋ねるなどして) ホーム レルムを選択し、SelectHomeRealm()を呼び出す必要があります。これは通常、送信ボタンの ASP.NET イベント ハンドラーで行われます。その時点で、制御はFormsSignIn.aspxページに転送されます。

FormsSignIn ページで、HomeRealmDiscovery ページに入力された (AD FS に直接関係しない) データを使用したいと思います。ただし、そのデータにアクセスする方法はありません。

MSDN ページ「方法: ASP.NET Web ページがどのように呼び出されたかを確認する」では、制御がどのように転送されたかを調べる方法について説明しています。私の場合、FormsSignIn ページIsPostBackが false、PreviousPagenull、およびfalse であることがわかりましたIsCallback。(これもIsCrossPagePostBackfalse です。)したがって、MSDN ページは、FormsSignIn ページが「元の要求」を使用して呼び出されたことを示唆しています。しかし、そうではありません.Fiddlerなどを使用して、クライアントブラウザをリダイレクトしても制御が転送されないことを確認しているためです。したがって、これは「サーバー転送」であると予想されるためPreviousPage、HomeRealmDiscovery ページ インスタンスを取得するために使用できます。(Cookie を使用しようとしましたが、ブラウザーが転送に関与していないため、機能しません。)

したがって、私の質問は次のとおりです。AD FS 2.0 の HomeRealmDiscovery.aspx ページから FormsSignIn.aspx ページに値を渡すにはどうすればよいですか?

4

1 に答える 1

2

AD FSはHTTPリクエストを操作するため、私が見つけた最善のオプションは、HttpContextItemsコレクションを使用してデータを共有することです。

したがって、HomeRealmDiscoveryページから、次のように値を設定します。

var context = HttpContext.Current;

string someValue = "someValue";
ComplexObject someOtherValue = new ComplexObject();

context.Items.Add("key", someValue);
context.Items.Add("key2", someOtherValue);

次に、FormsLoginPageで、次の値を取得します。

var context = HttpContext.Current;

var value = context.Items["key"] as string;
var otherValue = context.Items["key2"] as ComplexObject;

お役に立てれば。

于 2011-11-14T16:57:01.087 に答える