我正在使用库 ITfoxtec Identity SAML 2.0 通过 ASP.Net 4.6 MVC 应用程序和仅支持http-redirect
单次注销的第 3 方 IdP 来实施 SAML 2.0。我可以登录,但我无法让单次注销工作。该示例仅用于http-post
注销。是否有任何公开可用的示例代码显示如何使用 实现单次注销http-redirect
?
提前感谢您的帮助!
我正在使用库 ITfoxtec Identity SAML 2.0 通过 ASP.Net 4.6 MVC 应用程序和仅支持http-redirect
单次注销的第 3 方 IdP 来实施 SAML 2.0。我可以登录,但我无法让单次注销工作。该示例仅用于http-post
注销。是否有任何公开可用的示例代码显示如何使用 实现单次注销http-redirect
?
提前感谢您的帮助!
通过将绑定类 Saml2PostBinding 更改为 Saml2RedirectBinding,只需稍作更改即可支持使用重定向绑定注销。以下内容基于ITfoxtec Identity SAML 2.0 文档。
Auth Controller 中的注销方法
[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 Controller 中的 LoggedOut 方法 成功或失败注销后,已注销的方法会收到响应。
[Route("LoggedOut")]
public IActionResult LoggedOut()
{
var binding = new Saml2RedirectBinding();
binding.Unbind(Request.ToGenericHttpRequest(), new Saml2LogoutResponse(config));
return Redirect(Url.Content("~/"));
}
Auth Controller 中的 SingleLogout 方法接收 Single Logout 请求并发送响应。
[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();
}