IdentityServer4退出登录,跳转到原页面

IdentityServer4退出登录,注销登录已经封装好了我们使用其实很简单

  1. //注销登录
  2. public IActionResult Logout()
  3. {
  4.     return SignOut("Cookies", "oidc");
  5. }

但是里边封装的细节并不简单,由于是统一的认证中心单点登录,不仅仅是清楚退出项目的缓存和cookie等信息,还是在授权中心去清楚相关的认证信息,并且还要通知其他客户端用户退出信息。

 

退出登录后跳转到原页面

默认情况下退出登录后是会跳转到,配置的注销地址

/signout-callback-oidc会由客户端相关组件处理,基本都是跳转到首页,我们有些时候希望跳转到原来的页面

 

方法一:我们优先取出来原地址,进行跳转

在登录中心添加Logout方法:

  1. private readonly IIdentityServerInteractionService _interaction;
  2. public AccountController(IIdentityServerInteractionService interaction)
  3. {
  4.     _interaction = interaction;
  5. }
  6. [HttpGet]
  7. public async Task<IActionResult> Logout(string logoutId)
  8. {
  9.     #region IdentityServer4 退出登录后,默认会跳转到Config.Client配置的PostLogoutRedirectUris地址,做如下改动,则会动态的跳转到原来的地址
  10.     var logout = await _interaction.GetLogoutContextAsync(logoutId);
  11.     await HttpContext.SignOutAsync();
  12.     //获取客户端点击注销登录的地址
  13.     var refererUrl = Request.Headers["Referer"].ToString();
  14.     if (!string.IsNullOrWhiteSpace(refererUrl))
  15.     {
  16.         return Redirect(refererUrl);
  17.     }
  18.     else
  19.     {
  20.         //获取配置的默认的注销登录后的跳转地址
  21.         if (logout.PostLogoutRedirectUri != null)
  22.         {
  23.             return Redirect(logout.PostLogoutRedirectUri);
  24.         }
  25.     }
  26.     return View();
  27.     #endregion
  28. }

 

方法二:删除配置的PostLogoutRedirectUris,在添加方法

添加方法:

  1. private readonly IIdentityServerInteractionService _interaction;
  2. public AccountController(IIdentityServerInteractionService interaction)
  3. {
  4.     _interaction = interaction;
  5. }
  6. [HttpGet]
  7. public async Task<IActionResult> Logout(string logoutId)
  8. {
  9.     #region IdentityServer4 退出登录后,默认会跳转到Config.Client配置的PostLogoutRedirectUris地址,做如下改动,则会动态的跳转到原来的地址
  10.     var logout = await _interaction.GetLogoutContextAsync(logoutId);
  11.     await HttpContext.SignOutAsync();
  12.     if (logout.PostLogoutRedirectUri != null)
  13.     {
  14.         return Redirect(logout.PostLogoutRedirectUri);
  15.     }
  16.     //获取客户端点击注销登录的地址
  17.     var refererUrl = Request.Headers["Referer"].ToString();
  18.     return Redirect(refererUrl);
  19.     #endregion
  20. }
posted @ 2021-03-26 13:37  dreamw  阅读(1027)  评论(3编辑  收藏  举报