随笔 - 59  文章 - 20  评论 - 61  阅读 - 85494

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   SunnyTrudeau  阅读(656)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示