在OWIN/Katana身份验证管理器中使用HttpPost进行注销

本文关键字:HttpPost 注销 OWIN Katana 身份验证 管理器 | 更新日期: 2023-09-27 18:27:25

有没有办法强制Katana身份验证管理器使用HttpPost而不是HttpGet方法从IdentityServer3调用Logout端点?

我目前使用此方法从IdentityServer3调用endsession端点(根据本教程):

public ActionResult Logout()
{
    // standard way with HTTP GET
    Request.GetOwinContext().Authentication.SignOut();
    return Redirect("/");
}

我需要这个,因为URL会有2000多个字符,这会导致一些错误。

Thx帮助

在OWIN/Katana身份验证管理器中使用HttpPost进行注销

遗憾的是,OWIN中间件不支持HttpPost注销操作。作为一种变通方法,您可以手动将必要的参数发布到结束会话端点

我在我的MVC5应用程序中提供了一个链接,这样用户就可以注销:

@{
    Claim idTokenHintClaim = Request.GetOwinContext().Authentication.User.FindFirst("id_token");
    string idTokenHint = idTokenHintClaim != null
        ? idTokenHintClaim.Value
        : null;
}
<form action="https://.../core/endsession" method="POST" id="logoutForm">
    <input type="hidden" name="id_token_hint" value="@idTokenHint"/>
    <input type="hidden" name="post_logout_redirect_uri" value="@PostLogoutRedirectUrl"/>
</form>
<a href="javascript:document.getElementById('logoutForm').submit()">
    Logout
</a>

IdentityServer3正在执行其工作并销毁当前用户会话。之后,IdentityServer3将调用我们的@PostLogoutRedirectUrl@PostLogoutRedirectUrl指向MVC应用程序的控制器方法:

public ActionResult LogoutCallback()
{
    HttpCookie cookie = new HttpCookie("SecureCookieName");
    cookie.HttpOnly = true;
    cookie.Expires = new DateTime(1999, 10, 12);
    Response.Cookies.Remove("SecureCookieName");
    Response.Cookies.Add(cookie);
    SetPasswordResetHint();
    return RedirectToAction("Index");
}

我希望对HttpPost方法的支持将很快添加到OWIN中间件中。