Кросс-домен WIF на одном сайте IIS, динамическая настройка области - PullRequest
3 голосов
/ 16 ноября 2010

У нас много доменов, работающих на одном IIS WebSite / AppPool. Сейчас мы находимся в процессе внедрения единого входа с помощью Windows Identity Foundation.

в web.config область должна быть установлена ​​с

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

Моя проблема в том, что область зависит от того, с какого домена пользователь заходил на сайт так что я сделал это, что я установил его в глобальный фильтр действий, как это

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

Мой вопрос Когда я устанавливаю область таким образом, она устанавливается для экземпляра пользователя или экземпляр приложения.

Сценарий.

Пользователь A загружает страницу, и область устанавливается на domain.a.com.

Пользователь B уже вошел в систему на domain.b.com и нажимает кнопку входа.

Поскольку пользователь A загрузил страницу до того, как пользователь B нажал на кнопку входа, пользователь A попадет в STS с неправильным набором областей.

Что здесь будет?

Если это не способ установить область для пользовательского экземпляра, есть ли другой способ сделать это?

1 Ответ

3 голосов
/ 16 ноября 2010

Я уже решил проблему.

Я установил для PassiveRedirectEnabled значение false в web.config

Я настроил проект mvc для использования проверки подлинности с помощью форм, хотя я этого не делаю.Я делаю это так, чтобы меня перенаправляли на мой контроллер входа с 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());

Этоопределенно не совсем так, как должно быть, для меня такое ощущение, что Windows Identity Foundation отстает, как в документации, так и в технологии Microsoft, нет примеров для MVC.

Для других людей MVC я рекомендую им не использоватьмастер fedutil, а вместо этого сам пиши код и настройку

...