Identity Server 4退出登录自动跳转返回

Identity Server 4退出登录自动跳转返回

Identity Server系列目录

  1. Blazor Server访问Identity Server 4单点登录 - SunnyTrudeau - 博客园 (cnblogs.com)
  2. Blazor Server访问Identity Server 4单点登录2-集成Asp.Net角色 - SunnyTrudeau - 博客园 (cnblogs.com)
  3. Blazor Server访问Identity Server 4-手机验证码登录 - SunnyTrudeau - 博客园 (cnblogs.com)
  4. Blazor MAUI客户端访问Identity Server登录 - SunnyTrudeau - 博客园 (cnblogs.com)
  5. Identity Server 4项目集成Blazor组件 - SunnyTrudeau - 博客园 (cnblogs.com)

 

继续之前的项目,在Identity Server 4退出登录时,最后会停留在Identity Server 4项目,但是我想让它自动跳转回到我的调用网站。

 

这个是有办法解决的,改一下Identity Server 4Account控制器的Logout方法即可。

 

/// <summary>
        /// Show logout page
        /// </summary>
        [HttpGet]
        public async Task<IActionResult> Logout(string logoutId)
        {
            // build a model so the logout page knows what to display
            //var vm = await BuildLogoutViewModelAsync(logoutId);

            //if (vm.ShowLogoutPrompt == false)
            //{
            //    // if the request for logout was properly authenticated from IdentityServer, then
            //    // we don't need to show the prompt and can just log the user out directly.
            //    return await Logout(vm);
            //}

            //return View(vm);

            var logout = await _interaction.GetLogoutContextAsync(logoutId);

            if (User.Identity?.IsAuthenticated == true)
            {
                // delete local authentication cookie
                await _signInManager.SignOutAsync();

                // raise the logout event
                await _events.RaiseAsync(new UserLogoutSuccessEvent(User.GetSubjectId(), User.GetDisplayName()));
            }

            //默认跳转到Config.Client配置的PostLogoutRedirectUris地址
            if (logout.PostLogoutRedirectUri != null)
            {
                return Redirect(logout.PostLogoutRedirectUri);
            }

            //获取客户端点击注销登录的地址
            var refererUrl = Request.Headers["Referer"].ToString();
            return Redirect(refererUrl);
        }

 

VS2022联合运行AspNetId4Web认证服务器和BlzOidc网站,在BlzOidc网站先登录,再退出登录,可以看到浏览器返回BlzOidc网站。

 

HttpContext.SignOutAsync_signInManager.SignOutAsync的区别

我先是HttpContext.SignOutAsync退出登录,然后发现一个问题当我再次通过客户端登录时,它自动使用之前的用户完成登录,根本不显示登录页面,不能更换用户重新登录!查看浏览器cookies,可以发现,它退出登录后,根本没有清除相关的cookies

这是登录后的cookies

 

这是HttpContext.SignOutAsync退出登录后的cookies,还有一部分。

 

采用_signInManager.SignOutAsync,退出登录之后,可以看到,浏览器cookies已经清除,所以再次通过客户端登录的话,会显示登录页面,重新输入登录的用户。

这是_signInManager.SignOutAsync退出登录后的cookies,完全没有了。

 

 

 

 

参考文章:

IdentityServer4退出登录,跳转到原页面 - dreamw - 博客园 (cnblogs.com)

感谢作者。

 

DEMO代码地址:https://gitee.com/woodsun/blzid4

posted on 2021-11-28 22:29  SunnyTrudeau  阅读(562)  评论(0编辑  收藏  举报