Почему мой выход из WIF не выходит из всех сайтов RP? - PullRequest
3 голосов
/ 28 марта 2012

Единая регистрация работает нормально для моего приложения и ряда других веб-сайтов, которые используют STS. Когда я выхожу из своего приложения, я, кажется, правильно вышел из своего сайта; Тем не менее, я все еще могу получить доступ к другим приложениям, которые используют тот же STS, без необходимости входить снова Может кто-нибудь сказать мне, что мне не хватает?

Мое приложение вызывает все под солнцем, пытаясь заставить это работать, но поведение такое же, когда я вызываю только FederatedSignOut.

FederatedAuthentication.SessionAuthenticationModule.SignOut();
FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie();
FederatedAuthentication.WSFederationAuthenticationModule.SignOut(false);
System.Web.Security.FormsAuthentication.SignOut();
WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
WSFederationAuthenticationModule.FederatedSignOut(new Uri(authModule.Issuer), new Uri(authModule.Realm));

Вот мой код выхода из системы STS.

SignOutRequestMessage requestMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri(Request.Url);
FederatedPassiveSecurityTokenServiceOperations.ProcessSignOutRequest(requestMessage, User, requestMessage.Reply, Response);

Это проблема с STS или с моим приложением? Возможно ли, что это проблема конфигурации, если выход из системы хотя бы работает для моего приложения? Должен ли я явно отправлять сообщение "wsignoutcleanup1.0" всем RP, или должен ProcessSignOutRequest сделать это для меня?

Ответы [ 2 ]

3 голосов
/ 16 августа 2013

Согласно ссылке , это структура URL-адреса для выхода: https://{DNS_name_of_RP_STS}/adfs/ls/?wa=wsignout1.0&wreply={post-sign-out_landing_URL}

Позвоните ему напрямую или перенаправьте свой ответ на него.

Обновление: Или вы можете создать URI с помощью объекта SignOutRequestMessage.

var fa = FederatedAuthentication.WSFederationAuthenticationModule;
var signOutRequestMessage = new SignOutRequestMessage(new Uri(fa.Issuer), fa.Realm);
var signOutURI = signOutRequestMessage.WriteQueryString();
2 голосов
/ 29 марта 2012

Как вы, наверное, догадались, и STS, и ваше приложение создают свои собственные куки-файлы сеанса, и они не могут касаться куки-файлов друг друга, поэтому вам нужно сообщение wsignoutcleanup1.0.

На стороне вашего приложения необходим только вызов FederatedSignOut (). Он удалит ваш файл cookie сеанса приложения, прежде чем перенаправит его на STS, поэтому все остальное, что у вас есть, будет избыточным.

Теперь ваша служба STS должна правильно принимать и обрабатывать входящий запрос wsignoutcleanup1.0 в некоторой конечной точке выхода. Похоже, у тебя нет. Я бы сначала подтвердил, что этот ваш код STS на самом деле попал под удар. Если его ударили, но файл cookie сеанса STS остался, значит что-то не так.

...