【问题标题】:SAML 2.0 Logout SP initiated using ITfoxtec.Identity.Saml2使用 ITfoxtec.Identity.Saml2 启动的 SAML 2.0 注销 SP
【发布时间】:2021-06-16 11:14:46
【问题描述】:

前提:我对使用 SAML2.0 和库还很陌生 ITfoxtec.Identity.Saml2。 在我的场景中,我在 asp.net core 中实现了一个 web 应用程序,基本上基于库中包含的示例 TestWebAppCore。作为 IDP,我使用过 Keyloack 和 Okta。 我登录没有问题。我的问题随着注销而上升。 当 IDP 启动注销时我没有问题:我在 IDP 上配置了单点注销 (SingleLogout web Api) 的端点并且一切正常 我的问题是我的网络应用程序何时启动注销。工作流程如下: 在我的页面某处有一个注销按钮,它调用注销 Web-Api

    [HttpPost("Logout")]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Logout()
    {
        if (!User.Identity.IsAuthenticated)
        {
            return Redirect(Url.Content("~/"));
        }

        var binding = new Saml2PostBinding();
        var saml2LogoutRequest = await new Saml2LogoutRequest(config, User).DeleteSession(HttpContext);
        return binding.Bind(saml2LogoutRequest).ToActionResult();
    }

然而,问题似乎并不在这里。 问题是 IDP 调用总是 SingleLogOut Web API。我认为在这种情况下这是不正确的:在这种情况下,IDP 必须调用 LoggedOut Web API

    [Route("LoggedOut")]
    public IActionResult LoggedOut()
    {
        var binding = new Saml2PostBinding();
        binding.Unbind(Request.ToGenericHttpRequest(), new Saml2LogoutResponse(config));

        return Redirect(Url.Content("~/"));
    }

当然在这种情况下会引发以下异常“HTTP Form does not contain SAMLRequest”

问题是我找不到在 IDP 上配置 LoggedOut 端点的方法。

我的问题是:我从 Web 应用程序中启动注销的方式有什么问题吗?或者是否有一种方法可以从代码中在请求中设置 IDP 必须给我打电话的端点(注销)?或者在这种情况下,我的 IDP 配置肯定有问题,有人知道我可以用于测试的其他 IDP?

【问题讨论】:

    标签: asp.net-core itfoxtec-identity-saml2


    【解决方案1】:

    问题可能是您的 IdP 不支持两个注销端点,即:LocationResponseLocation

    您可以通过读取请求来判断它是 SAML 2.0 请求还是 SAML 2.0 响应,从而在您的应用程序(依赖方)中支持一个注销端点 (Location)。

    阅读代码如下所示:

    var genericHttpRequest = Request.ToGenericHttpRequest();
    if (new Saml2PostBinding().IsResponse(genericHttpRequest) || new Saml2RedirectBinding().IsResponse(genericHttpRequest))
    {
        // Do logged out.
    }
    else
    { 
        // Do single logout
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2019-02-24
      • 2020-12-21
      • 1970-01-01
      • 2015-04-10
      相关资源
      最近更新 更多