我正在尝试使用Identity Server实现单点登出模式,但到目前为止它还无法正常工作。当然,我一直在为我的Identity Server中注册的每个客户端注册BackChannelLogout url。根据手册(http://docs.identityserver.io/en/latest/topics/signout.html),Back-channel服务器端方法的工作方式是所有注册了BackChannelLogout url的客户端都会收到带有注销令牌的http请求。不幸的是,这不会发生。通过检查这个模式的样本,我看到他们一直指向这部分代码:
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> BackChannelLogout(string logout_token)
{
Response.Headers.Add("Cache-Control", "no-cache, no-store");
Response.Headers.Add("Pragma", "no-cache");
try
{
var user = await ValidateLogoutToken(logout_token);
// these are the sub & sid to signout
var sub = user.FindFirst("sub")?.Value;
var sid = user.FindFirst("sid")?.Value;
return Ok();
}
catch { }
return BadRequest();
}
然而,我看到没有迹象表明这些特定的http请求直接指向注册的客户端。这是如何运作的?你能指点我正确的方向吗?谢谢!
发现exession / callback端点是负责调用注册为BackChannelLogout的所有url的端点。 Logout控制器是负责整个管道的控制器。详细指南在这里,希望它能帮助其他人解决同样的问题! https://blog.tretainfotech.com/posts/2018/august/single-sign-out-in-identityserver4-with-back-channel-logout/