我正在使用库ITfoxtec Identity SAML2.0来实现SAML2.0,它使用一个ASP.Net 4.6MVC应用程序和一个只支持http-redirect单独注销的第三方IdP。我可以登录,但我不能让单一的注销工作。该示例仅使用http-post进行注销。是否有公开可用的示例代码显示如何使用http-redirect实现单个注销?
提前感谢您的帮助!
发布于 2020-08-20 20:27:51
通过将绑定类Saml2PostBinding更改为Saml2RedirectBinding,可以通过小的更改来支持重定向绑定的注销。下面的内容基于ITfoxtec标识SAML2.0文档。
Auth控制器中的注销方法
[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方法在成功或注销失败后,注销方法接收响应。
[Route("LoggedOut")]
public IActionResult LoggedOut()
{
var binding = new Saml2RedirectBinding();
binding.Unbind(Request.ToGenericHttpRequest(), new Saml2LogoutResponse(config));
return Redirect(Url.Content("~/"));
}Auth中的SingleLogout方法接收单个注销请求并发送响应。
[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();
}https://stackoverflow.com/questions/63512375
复制相似问题