有没有办法强制Katana身份验证管理器使用HttpPost而不是HttpGet方法从IdentityServer3调用Logout端点?
我目前使用此方法从IdentityServer3调用endsession端点(根据this教程):
public ActionResult Logout()
{
// standard way with HTTP GET
Request.GetOwinContext().Authentication.SignOut();
return Redirect("/");
}
我需要这个,因为URL会有超过2000个字符,这会导致一些错误。
寻求帮助
答案 0 :(得分:3)
可悲的是,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");
}
我希望很快就会在OWIN中间件中添加对HttpPost方法的支持。