4

1 つの IIS Web サイト/アプリケーション プールで多数のドメインを実行しています。現在、Windows Identity Foundation で SSO を実装しています。

web.config では、レルムを設定する必要があります

<wsFederation passiveRedirectEnabled="true" issuer="http://issuer.com" realm="http://realm.com" requireHttps="false" />

私の問題は、ユーザーがWebサイトにアクセスしたドメインにレルムが依存しているため、このようにグローバルアクションフィルターに設定したことです

var module = context.HttpContext.ApplicationInstance.Modules["WSFederationAuthenticationModule"] as WSFederationAuthenticationModule;
module.Realm = "http://" + siteInfo.DomainName;

私の質問はです。このようにレルムを設定すると、ユーザー インスタンスまたはアプリケーション インスタンスごとに設定されます。

シナリオ。

ユーザー A がページを読み込み、レルムが domain.a.com に設定されます。

ユーザー B は既に domain.b.com にログインしており、ログインを押します。

ユーザー B がログインを押す前にユーザー A がページをロードしたため、ユーザー A は間違ったレルム セットで STS にヒットします。

ここで何が起こりますか?

これがユーザー インスタンスごとにレルムを設定する方法でない場合、別の方法はありますか?

4

1 に答える 1

4

私はすでに問題を解決しました。

web.config で PassiveRedirectEnabled を false に設定しました

フォーム認証を使用するように mvc プロジェクトをセットアップしましたが、使用していません。[Authorize] を持つコントローラーが実行されるたびに、リターン URL を使用してログイン コントローラーにリダイレクトされるようにします。

私のログインコントローラーで私は

var module = HttpContext.ApplicationInstance.Modules["WSFederationAuthenticationModule"] as WSFederationAuthenticationModule;
module.PassiveRedirectEnabled = true;

SignInRequestMessage mess = module.CreateSignInRequest("passive", returnUrl, false);
mess.Realm = "http://" + Request.Url.Host.ToLower();

HttpContext.Response.Redirect(mess.WriteQueryString());

これは間違いなく本来あるべき姿ではありません.MVCの例ではなく、ドキュメントとMicrosoftテクノロジの両方で、Windows Identity Foundationが遅れているように感じます.

他の MVC 関係者には、fedutil ウィザードを使用せず、コードと構成を自分で作成することをお勧めします。

于 2010-11-16T15:29:29.987 に答える