ACS注销重定向不起作用

本文关键字:不起作用 重定向 注销 ACS | 更新日期: 2023-09-27 18:29:01

在ACSSSO上工作,签出过程工作得非常好。问题是用户仍然停留在调用注销操作的同一页面上,无论我将其设置为重定向到

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 to signoutURL,并尝试了RedirectToAction、RedirectToRoute和javascript调用来设置window.location,但似乎没有一个能更好地将用户转移到另一个页面。我错过了什么?

ACS注销重定向不起作用

我最终所做的是将Logout逻辑移动到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);
    }