首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用http-重定向实现单个注销

如何使用http-重定向实现单个注销
EN

Stack Overflow用户
提问于 2020-08-20 19:59:13
回答 1查看 1.9K关注 0票数 2

我正在使用库ITfoxtec Identity SAML2.0来实现SAML2.0,它使用一个ASP.Net 4.6MVC应用程序和一个只支持http-redirect单独注销的第三方IdP。我可以登录,但我不能让单一的注销工作。该示例仅使用http-post进行注销。是否有公开可用的示例代码显示如何使用http-redirect实现单个注销?

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-20 20:27:51

通过将绑定类Saml2PostBinding更改为Saml2RedirectBinding,可以通过小的更改来支持重定向绑定的注销。下面的内容基于ITfoxtec标识SAML2.0文档

Auth控制器中的注销方法

代码语言:javascript
复制
[HttpPost("Logout")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Logout()
{
    if (!User.Identity.IsAuthenticated)
    {
        return Redirect(Url.Content("~/"));
    }

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

Auth中的LoggedOut方法在成功或注销失败后,注销方法接收响应。

代码语言:javascript
复制
[Route("LoggedOut")]
public IActionResult LoggedOut()
{
    var binding = new Saml2RedirectBinding();
    binding.Unbind(Request.ToGenericHttpRequest(), new Saml2LogoutResponse(config));

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

Auth中的SingleLogout方法接收单个注销请求并发送响应。

代码语言:javascript
复制
[Route("SingleLogout")]
public async Task<IActionResult> SingleLogout()
{
    Saml2StatusCodes status;
    var requestBinding = new Saml2RedirectBinding();
    var logoutRequest = new Saml2LogoutRequest(config, User);
    try
    {
        requestBinding.Unbind(Request.ToGenericHttpRequest(), logoutRequest);
        status = Saml2StatusCodes.Success;
        await logoutRequest.DeleteSession(HttpContext);
    }
    catch (Exception exc)
    {
        // log exception
        Debug.WriteLine("SingleLogout error: " + exc.ToString());
        status = Saml2StatusCodes.RequestDenied;
    }

    var responsebinding = new Saml2RedirectBinding();
    responsebinding.RelayState = requestBinding.RelayState;
    var saml2LogoutResponse = new Saml2LogoutResponse(config)
    {
        InResponseToAsString = logoutRequest.IdAsString,
        Status = status,
    };
    return responsebinding.Bind(saml2LogoutResponse).ToActionResult();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63512375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档