2010-11-16 7 views
3

De nombreux domaines sont exécutés sur un site Web IIS/AppPool. Actuellement, nous sommes en train de mettre en œuvre SSO avec Windows Identity Foundation.WIF interdomaine sur un site IIS, définition dynamique du domaine

dans web.config le domaine doit être réglé avec

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

Mon problème est que le domaine dépend de quel domaine l'utilisateur a accédé au site Web sur donc ce que je l'ai fait est que je l'ai mis en un filtre d'action globale comme ceci

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

Ma question est. Lorsque je définis le domaine comme ceci, est-il défini par instance d'utilisateur ou instance d'application.

Scénario.

L'utilisateur A charge la page et le domaine est défini sur domain.a.com.

L'utilisateur B est déjà connecté sur domain.b.com et appuie sur la connexion.

Étant donné que l'utilisateur A a chargé la page avant que l'utilisateur B ne clique sur la connexion, l'utilisateur A va frapper le STS avec le mauvais domaine défini.

Que va-t-il se passer ici?

Si ce n'est pas la manière de définir le domaine par instance d'utilisateur, existe-t-il une autre façon de le faire?

Répondre

3

J'ai déjà résolu le problème.

Je mis PassiveRedirectEnabled false dans web.config

Je mis en place le projet mvc d'utiliser l'authentification par formulaire, eventhough je ne. Je fais cela pour que je sois redirigé vers mon contrôleur de connexion avec une url de retour à chaque fois qu'un contrôleur avec [Authorize] est exécuté.

Dans mon contrôleur de connexion je

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()); 

C'est certainement pas vraiment comment il devrait être, pour moi, il se sent comme Windows Identity Foundation est en retard, à la fois dans la documentation et de la technologie Microsoft sage, pas d'exemples pour MVC.

Pour les autres personnes MVC, je leur recommande de ne pas utiliser l'assistant fedutil, et d'écrire le code et la configuration à la place

Questions connexes