2012-03-08 8 views
4

私は既存のWebアプリケーションでWindows IDファンデーションを有効にしています。STSを設定しますが、webappにフォーム認証を保存します

私は既存のコードで少しだけ混乱させたいので、アプリケーションに残っているformsauthenticationを使用するログインページにしたいと思います。ユーザーが特定のページ、 im_comming_from_some_other_site.aspx "

コードは次のようになり、「im_comming_from_some_other_site.aspx」で:

Page_Load(...) 
{ 
    if(verifyAgainstSTS() 
    { 
     FormsAuthentication.SetAuthCookie(<some_STS_Userid), ...) 
     Response.Redirect("default.aspx") 
    } 
    else 
    { 
     Response.Redirect("http://<STS_server_name/<STS_service...etc>") 
    } 
} 

は、これを行うとどのようにすることができるならば知っている人はありますか?サンプルコードへのリンク(利用可能な場合)を深く感謝します。

(認証がタイムアウトしたときに何をすべきかを決定する際にもちろん、いくつかのコードが必要とされるであろう、いずれかのローカルログインページや後藤STS-ログインページに進みます)

私はこれは悪いように見えるかもしれませんが知っていますデザイン、STSのすべての方法を行っていないが、私はこれを実装する必要があり、私は可能な限り元のサイトを保つためにしたい。

答えて

2

これは悪いデザインではなく、あなたの要件であり、あなたはそれを達成しようとします。私たちはそのようなシステムを構築しており、ロケット科学ではありません。唯一の違いは、動的にではなく静的に(グローバル設定を介して)forms/samに切り替えることです。

とにかくフォーム認証をweb.configにしておくと、現在のユーザーの承認がないときにフォームがログインページにリクエストをリダイレクトするようにします。

ログインページには2つのオプションがあります。何らかの形でフォームクッキーが作成されます。 もう1つのオプションは、WIFのFederatedPassiveSignInコントロールです。

ユーザーがフォーム認証に従うと、Cookieが設定され、完了します。 ユーザーがSTSログイン制御に従うと、遅かれ早かれ有効なSAMLトークンが返されます。 FederatedPassiveSignInは自動的にそれを取得し、SignedInイベントでリダイレクトを処理するだけです。

ご質問にお答えしたifは必要ありません。

私が覚えていることから1つの注意点があります。ユーザーがSTSによって認証されると、WS-Federation Cookieが作成され、クレームなどを読むことができます。すべて動作します。

ただし、ユーザーがフォームで認証されている場合、SAM(SessionAuthenticationModule)は、各要求時にASP.NETパイプラインのWS-Federationクッキーによってフォームクッキーを置き換えます(SAMは後でパイプラインに入りますフォーム認証モジュール)。

これはあなたのcontext.User.Identity.IsInRole(...)の承認も正しく機能します。これは、SAMがユーザーロールを対応するクレームにコピーするためです。

ただし、一般的なAPIではなくフォームクッキーから直接情報を抽出しようとすると、ユーザーがフォームで認証されていてもフォームクッキーが存在しないことがわかります(そして、WS-Federationクッキーに置き換えられるため、クッキーは存在しません)。

+0

素晴らしいですが、どうすればいいですか?私はFederatedPassiveSignInをログインページに置くか、...?いくつかのモジュールをweb.configなどに追加する必要がありますか? – mortb

+0

まあ、両方。 'SessionAuthenticationModule'と' FederatedPassiveSignIn'が必要です。あなたは私のチュートリアルの1つを読むことができますhttp://netpl.blogspot.com/2011/08/quest-for-customizing-adfs-signing-web.html –

+0

これは本当に私を助けました。 サイトには、フォーム認証Cookieを別のサイトと共有することにより、すでに「セミ」SSOがありました。 FederatedPassiveSigninコントロールでSSOを追加しました.SSOと共有フォーム認証Cookieの両方が動作します。 – mortb

関連する問題