WAAD Logout перенаправление на страницу входа в офис 365

Возникла проблема с выходом из моего приложения с использованием WSfederationAuthentication. При выходе я выполняю следующий код:

FormsAuthentication.SignOut();

            if (FederatedAuthentication.SessionAuthenticationModule != null)
            {
                FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie();
                FederatedAuthentication.SessionAuthenticationModule.SignOut();
            }

            if (FederatedAuthentication.WSFederationAuthenticationModule != null)
            {
                WSFederationAuthenticationModule authModule =
                    FederatedAuthentication.WSFederationAuthenticationModule;
                authModule.SignOut(true);

                String signoutURL = WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(
                    authModule.Issuer,
                    authModule.Realm",
                    null);

                WSFederationAuthenticationModule.FederatedSignOut(
                    new Uri(signoutURL),
                    new Uri(authModule.Realm));                    
            }

Файлы cookie удаляются и т. Д., Но страница перенаправляется на страницу входа в office365, а не на страницу входа в мои приложения.

Эмитент и Область являются правильными. Эмитент: https://login.windows.net/EndpointID/wsfed Область: https//:localhost:444 (базовый адрес моего приложения, localhost)

Ниже приведен журнал фиддлера после того, как я нажму "Выйти":

http://login.windows.net:443
https://login.windows.net/EndpointID/wsfed?wa=wsignout1.0&wreply=https%3a%2f%2f127.0.0.1%3a444%2f
https://localhost:444/?wa=wsignoutcleanup1.0
http://login.microsoftonline.com:443
https://login.microsoftonline.com/login.srf?wa=wsignout1.0
https://login.microsoftonline.com/logout.srf?wa=wsignout1.0&lc=1033
https://login.windows.net/common/wsfed?wa=wsignoutcleanup1.0  **<<<<------ Why ?**
http://login.microsoftonline-p.com:443 
https://login.microsoftonline-p.com/ThirdPartyCookieCheck.srf?ct=9348739876
https://login.microsoftonline-p.com/ThirdPartyCookieCheck.srf?tpc=394875457987&lc=1033
https://login.microsoftonline.com/?lc=1033

Эти ребята сталкиваются с похожей проблемой, без разрешения: http://social.msdn.microsoft.com/Forums/vstudio/en-US/ac41c0c5-83ef-4394-9111-fa6d07215f5d/adfs-20-does-not-redirect-back-to-reply-url-on-signout?forum=Geneva встречно -ответ-url-на-SignOut? форум = Женева

1 ответ

Решение

Без ответов здесь я могу предположить, что никто другой никогда не сталкивался с этой проблемой:D.

Я нашел решение для тех, кто приземляется здесь, ища то же самое.

Итак, согласно документации WSFederationAuthenticationModule.FederatedSignOut на MSDN:

Вызовите этот метод, чтобы отправить сообщение с запросом на выход из WS-Federation на указанный STS. При желании вы можете указать значение параметра wreply в запросе на выход. Метод делает следующее:

  1. Создает сообщение с запросом на выход из WS-Federation с использованием указанных параметров.

  2. Вызывает метод SessionAuthenticationModule.DeleteSessionTokenCookie в SAM, чтобы удалить cookie сеанса.

  3. Перенаправляет на STS, используя сообщение запроса на выход из первого шага.

По какой-то причине для меня это не сработало, как рекламировалось:( . Поэтому я решил эти 3 вещи вручную, которые работали без нареканий. Проблема решена на данный момент, но все еще задаюсь вопросом, почему не работает предоставляемая оболочка.

FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie();
FederatedAuthentication.SessionAuthenticationModule.SignOut();

WSFederationAuthenticationModule wsfederationAuthenticationModule = FederatedAuthentication.WSFederationAuthenticationModule;
wsfederationAuthenticationModule.SignOut(true);
signOutRequestMessageuestMessage signOutRequestMessage = new signOutRequestMessageuestMessage(new Uri(wsfederationAuthenticationModule.Issuer));
signOutRequestMessage.Parameters.Add("wreply", wsfederationAuthenticationModule.Realm);
signOutRequestMessage.Parameters.Add("wtrealm", wsfederationAuthenticationModule.Realm);
signOutURI = signOutRequestMessage.WriteQueryString();
Redirect(signOutURI)

Надеюсь это поможет.

Gaurav

Другие вопросы по тегам