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 @   dreamw  阅读(1151)  评论(3编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示