2013-08-23 54 views
0

使用ACS SSO,注销过程工作得很好。问题是,用户仍然调用注销操作在同一页上,不管我把它设置为重定向到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 = "" })'); 
}); 

点击被正确处理,注销操作被调用并执行,但该网站仍然在呼叫页面上。网络日志显示了注销的调用,但没有证据表明重定向甚至正在尝试。为了进行调试,我已经将重定向注释为signoutURL,并尝试使用RedirectToAction,RedirectToRoute和javascript调用来设置window.location,但在将用户转移到其他页面时似乎没有任何更好的办法。我错过了什么?

回答

0

我最终什么事做了注销逻辑移动到一个Model类

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); 
    }