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 в запросе на выход. Метод делает следующее:
Создает сообщение с запросом на выход из WS-Federation с использованием указанных параметров.
Вызывает метод SessionAuthenticationModule.DeleteSessionTokenCookie в SAM, чтобы удалить cookie сеанса.
Перенаправляет на 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