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
相关产品推荐
相关产品推荐

