2013-08-23 2 views
0

Работает на SSO SSS, а процесс выписки работает отлично. Проблема заключается в том пользователи остаются на той же странице, что вызывает действие выхода из системы, независимо от того, что я это набор для перенаправленияПереадресация выписки ACS не работает

public ActionResult Logout() 
{ 
    //Load identity configuration 
    FederationConfiguration config = FederatedAuthentication.FederationConfiguration; 

    //Get wtrealm from WSFederationConfiguration Section 
    string wtrealm = config.WsFederationConfiguration.Realm; 
    string wreply = wtrealm; 

    //Read ACS Ws-Federation endpoint from web.config 
    string wsFederationEndpoint = ConfigurationManager.AppSettings["ida:Issuer"]; 

    SignOutRequestMessage signoutRequestMessage = new SignOutRequestMessage(new Uri(wsFederationEndpoint)); 
    signoutRequestMessage.Parameters.Add("wreply", wreply); 
    signoutRequestMessage.Parameters.Add("wtrealm", wtrealm); 
    string signoutUrl = signoutRequestMessage.WriteQueryString(); 

    FederatedAuthentication.WSFederationAuthenticationModule.SignOut(); 
    return this.Redirect(signoutUrl);   
} 

Чтобы выполнить это действие, страница имеет обработчик щелчка

$('#logout').click(function() { 
    $.post('@Url.Action("Logout", "Home", new { area = "" })'); 
}); 

Щелчок правильно обрабатывается, вызывается и выполняется действие «Выход», но сайт остается на вызывающей странице. В сетевом журнале показан вызов выхода из системы, но нет доказательств того, что при попытке перенаправления выполняется попытка. В попытке отладки я прокомментировал Redirect для signoutURL и попробовал RedirectToAction, RedirectToRoute и javascript-вызов для установки window.location, ни один из которых, похоже, лучше не переносит пользователя на другую страницу. Что мне не хватает?

ответ

0

То, что я в конечном итоге делаю двигались логика выхода из системы в модели класс

public class LogoutHandler 
{ 
    public string Signout() 
    { 
     // Load Identity Configuration 
     FederationConfiguration config = FederatedAuthentication.FederationConfiguration; 

     // Get wtrealm from WsFederationConfiguation Section 
     string wtrealm = config.WsFederationConfiguration.Realm; 
     string wreply; 
     wreply = wtrealm; 

     // Read the ACS Ws-Federation endpoint from web.Config 
     string wsFederationEndpoint = ConfigurationManager.AppSettings["ida:Issuer"]; 

     SignOutRequestMessage signoutRequestMessage = new SignOutRequestMessage(new Uri(wsFederationEndpoint)); 

     signoutRequestMessage.Parameters.Add("wreply", wreply); 
     signoutRequestMessage.Parameters.Add("wtrealm", wtrealm); 

     FederatedAuthentication.SessionAuthenticationModule.SignOut(); 

     return signoutRequestMessage.WriteQueryString();    
    } 
} 

И с моим выходом из системы действий, вызов, класса вернуть URL, а затем перенаправить на него. Все хорошо сработало, хотя я не знаю, есть ли что-нибудь, что необходимо учитывать с мобильным телефоном

public ActionResult Logout() 
    { 
     string signoutUrl = new LogoutHandler().Signout(); 
     return Redirect(signoutUrl); 
    } 
Смежные вопросы