Question

J'utilise un STS personnalisé pour SP. Le site est un jeton SAML activé avec l'implémentation SSO.La déconnexion ne fonctionne pas correctement. Comment puis-je implémenter une déconnexion personnalisée. Dois-je effacer la session SP ou effacer les cookies ?

Était-ce utile?

La solution

Je viens de m'attaquer à cette tâche précise ce matin.Vous aurez besoin de votre STS personnalisé pour garder une trace des sites connectés, et dans le gestionnaire wsignout1.0, vous devrez parcourir la liste et vous déconnecter.

La description complète de cette méthode, une classe d'assistance pour suivre les RP connectés et le code à ajouter à votre gestionnaire wsignout sont tous ici :

http://netpl.blogspot.co.uk/2010/12/wif-ws-federation-and-single-sign-out.html

J'ai cependant apporté une modification à la classe d'assistance, j'ai ajouté une méthode CleanUp pour supprimer le cookie qui assure le suivi des RP une fois que vous êtes déconnecté :

public static void CleanUp()
{
    HttpCookie siteCookie = HttpContext.Current.Request.Cookies[SITECOOKIENAME];

    if (siteCookie != null)
        HttpContext.Current.Response.Cookies[SITECOOKIENAME].Expires = DateTime.Now.AddDays(-1);
}

Et puis, à la fin, si votre gestionnaire de déconnexion, appelez-le.Voici mon bloc de gestionnaire de déconnexion :

        else if ( action == WSFederationConstants.Actions.SignOut )
        {
            // Process signout request.
            SignOutRequestMessage requestMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri( Request.Url );
            FederatedPassiveSecurityTokenServiceOperations.ProcessSignOutRequest( requestMessage, User, requestMessage.Reply, Response );

            string[] signedInUrls = SingleSignOnManager.SignOut();
            lblSignoutText.Visible = true;
            foreach (string url in signedInUrls)
            {
                SignOutLinks.Controls.Add(
                    new LiteralControl(string.Format(
                        "<p><a href='{0}'>{0}</a>&nbsp;<img src='{0}?wa=wsignoutcleanup1.0' " +
                        "title='Signout request: {0}?wa=wsignoutcleanup1.0'/></p>", url)));
            }

            SingleSignOnManager.CleanUp();
        }

Fonctionne à merveille.N'oubliez pas de créer un asp:Label appelé lblSignoutText et un div appelé SignOutLinks sur votre Default.aspx

La seule chose que vous devrez comprendre vous-même, c'est que le lien de déconnexion de chaque site SharePoint devra être masqué et vous devrez créer votre propre lien de déconnexion qui pointe vers :

http://mycustomsts/Default.aspx?wa=wsignout1.0

(En fait, je cherchais sur Google une manière intelligente de procéder lorsque je suis tombé sur cette question.J'espère que ma réponse vous aidera !)

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top