ITfoxtec SAML 2.0 - 单次注销

Posted

技术标签:

【中文标题】ITfoxtec SAML 2.0 - 单次注销【英文标题】:ITfoxtec SAML 2.0 - Single Logout 【发布时间】:2021-12-12 02:33:02 【问题描述】:

我有一个 IdP 和两个 SP(A 和 B)设置。 SSO 在它们之间运行良好。当我从站点 A 注销时,单点注销也有效(它也将用户从站点 B 注销)但是当我尝试从站点 B 注销时会出现问题。它将用户从站点 B 注销但是当我导航到站点 A 时在我删除会话 cookie 或会话超时之前仍处于登录状态。

站点 A 使用 ITfoxtec.Identity.Saml2 SAML2.0 MVC 实现。

如果我手动删除 cookie 并刷新页面,我将被重定向到登录页面。

它似乎终止了会话,但会话 cookie 仍然存在于浏览器中,它允许用户浏览直到它过期,它无法更新它。

SingleLogout 端点与示例中的相同 (Source from ITfoxtec.Identity.Saml2 - TestWebApp)

你见过类似的吗?我想不出在这种情况下可以做什么。

public ActionResult SingleLogout()
        
            Saml2StatusCodes status;
            var requestBinding = new Saml2PostBinding();
            var logoutRequest = new Saml2LogoutRequest(config, ClaimsPrincipal.Current);
            try
            
                requestBinding.Unbind(Request.ToGenericHttpRequest(), logoutRequest);
                status = Saml2StatusCodes.Success;
                logoutRequest.DeleteSession();
            
            catch (Exception exc)
            
                // log exception
                Debug.WriteLine("SingleLogout error: " + exc.ToString());
                status = Saml2StatusCodes.RequestDenied;
            

            var responsebinding = new Saml2PostBinding();
            responsebinding.RelayState = requestBinding.RelayState;
            var saml2LogoutResponse = new Saml2LogoutResponse(config)
            
                InResponseToAsString = logoutRequest.IdAsString,
                Status = status,
            ;            
            return responsebinding.Bind(saml2LogoutResponse).ToActionResult();
        

【问题讨论】:

【参考方案1】:

当浏览器从 IdP 重定向到站点 A 时,可能是您的 IdP 限制将 cookie 发送到站点 A 而不是站点 B。如果是这种情况,您可以尝试使用 POST 而不是重定向。 POST 可能不受限制。

您可以在 Fiddler 或浏览器中跟踪 HTTPS 流量进行调试。

【讨论】:

就是这样。 cookie 没有发送到站点 A。我将其更改为 post binding,但问题仍然存在。现在 cookie 正在与 SAML 注销请求一起发送,但用户仍然“登录”。 最后搞定了。必须将 LoggedOut 逻辑添加到 SingleLogout 方法中,如 (***.com/questions/68001594/…) 所述,因为 IdP 仅支持一种注销方法。还要确保 cookie 为“SameSite=None”且安全。

以上是关于ITfoxtec SAML 2.0 - 单次注销的主要内容,如果未能解决你的问题,请参考以下文章

ITfoxtec SAML 2.0:配置 AWS SSO 时出现 InvalidSignatureException

ITfoxtec SAML 2.0 Azure 广告证书格式问题 .Cer 到 .PFX

使用 SAML 单次注销 (SLO) 调用注销 URL 后如何清除 Android 网络视图 cookie?

SAML SLO(单次注销)是不是从所有 SP(服务提供商)注销?

WSO2 和 Spring SAML 单次注销问题

itfoxtec-identity-saml2 中的方法 ValidateRelyingParty 从哪里派生?