You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC集成Azure AD后如何仅退出应用而不登出Azure AD

解决方案

问题根源

  • 前两种方案未正确清除OWIN管道维护的本地身份认证Cookie,残留的身份上下文和匿名状态冲突,导致Html.AntiForgeryToken()生成时读取声明失败
  • 第三种方案同时传入了OpenIdConnect和Cookie两种认证类型的登出参数,触发了Azure AD的单点登出流程

正确实现步骤

1. 仅清除本地应用的身份Cookie

登出接口仅调用Cookie认证的登出逻辑,不要传入OpenIdConnect相关的认证类型,代码如下:

// 仅清除本地Cookie身份凭证,不触发Azure AD单点登出
HttpContext.GetOwinContext().Authentication.SignOut(CookieAuthenticationDefaults.AuthenticationType);
// 重定向到标记了[AllowAnonymous]特性的登录页/首页
return RedirectToAction("Index", "Login");

2. 修复AntiForgeryToken报错问题

在Global.asax的Application_Start方法中添加如下配置,允许匿名状态下生成防伪令牌:

AntiForgeryConfig.SuppressIdentityHeuristicChecks = true;

验证效果

完成上述调整后:

  • 登出后当前应用访问受限接口会自动跳转登录页
  • 同一浏览器下其他使用同Azure AD租户的应用仍保持登录状态,无全局单点登出
  • 登录页的Html.AntiForgeryToken()不再抛出声明缺失错误

内容的提问来源于stack exchange,提问作者Mahogany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:45:00