2011-05-26 1 views
1

Travailler sur un projet où nous utilisons Windows Identity Foundation. Lors du test de la solution de déconnexion, j'ai trouvé que l'appel suivant http://rp/?wa=wsignoutcleanup1.0 ne supprime pas le cookie FedAuth sur le RP. Qui, à son tour, oblige l'utilisateur à rester connecté au RP.wa = wsignupcleanup1.0 ne se déconnecte pas utilisateur sur Relying Party

Pour remédier à la situation dans laquelle j'ajouté le code suivant à la Global.asax:

protected void Application_Start() 
{ 
    FederatedAuthentication.WSFederationAuthenticationModule.SigningOut += new EventHandler<SigningOutEventArgs>(WSFederationAuthenticationModule_SigningOut); 
} 

void WSFederationAuthenticationModule_SigningOut(object sender, SigningOutEventArgs e) 
{ 
    FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie(); 
} 

mais ne devrait pas WIF prendre soin de cela automatiquement? Ou est-ce la façon de le faire?

+0

Cela devrait fonctionner, particulièrement cela fonctionne pour notre projet. Vérifiez quelle est la réponse HTTP de votre RP avec Fiddler, FireBug ou un outil similaire. Et vérifiez également que vous avez correctement activé WIF httpModules dans web.config. –

+0

J'ai utilisé le code mais j'ai eu une erreur comme 'Message d'erreur du compilateur: CS0246: Le type ou le nom d'espace de noms 'SigningOutEventArgs' est introuvable (manque-t-il une directive using ou une référence d'assembly?)' –

Répondre

2

Assurez-vous que tous les boîtiers d'URL correspondent, même le nom de l'application, le nom du site Web dans IIS doit correspondre aux URL des configs. J'ai eu du mal à suivre cela. Voir ici: wasignoutcleanup issue

2

D'accord avec @Anton. Cela devrait fonctionner pour les cookies WIF. Il ne nettoie pas votre propre session cependant.

Si vous avez d'autres choses à nettoyer, alors vous devez faire un travail supplémentaire. La mise en garde est que l'objet de session n'est pas disponible à partir des gestionnaires d'événements WIF. Par exemple, vous ne pouvez pas appeler Session.Abandon() à partir de WSFederationAuthenticationModuleSigningOut. Généralement, vous redirigez vers une autre page pour le nettoyage final. Un exemple de ceci est disponible ici: http://claimsid.codeplex.com (échantillon # 1)

Questions connexes