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

Azure AD B2C存在开放重定向漏洞?OWIN+OpenID认证场景疑问

为什么Azure AD B2C没阻止我修改后的登出重定向?

嘿,这个问题我之前帮不少开发者排查过,核心原因其实和Azure AD B2C登出端点的验证逻辑以及你发起请求的方式有关:

  • 合法登出请求(带id_token_hint):如果你的应用通过正常流程发起登出(比如调用OWIN的登出方法),应该会自动带上用户登录时获取的id_token_hint参数。这时候Azure AD B2C会先验证这个ID Token的有效性,再严格检查post_logout_redirect_uri是否在你门户配置的允许列表里——这种情况下,你改参数根本绕不过验证。
  • 直接修改地址栏的请求(无id_token_hint):你直接在浏览器地址栏改参数的操作,相当于绕开了应用发起的合法流程,此时请求里没有携带有效的id_token_hint。B2C没办法确认这个请求来自你授权的应用,出于兼容性和用户体验的考虑,它会完成登出,但不会严格校验重定向URI,所以你才能跳到未授权的地址。

这算不算开放重定向漏洞?

严格来说不算。开放重定向漏洞是指应用本身有逻辑缺陷,允许攻击者构造恶意链接诱导用户跳转,而你的场景是用户主动修改浏览器地址栏的参数,属于主动发起的非法操作,并非应用或B2C的安全漏洞。

怎么解决这个问题?

你需要确保应用发起的登出请求始终携带id_token_hint。在你的OWIN配置里,可以通过OpenIdConnectAuthenticationNotifications的RedirectToIdentityProvider事件来添加这个参数:

Notifications = new OpenIdConnectAuthenticationNotifications
{
    RedirectToIdentityProvider = context =>
    {
        // 处理登出请求
        if (context.ProtocolMessage.RequestType == OpenIdConnectRequestType.Logout)
        {
            // 获取用户的ID Token
            var idToken = context.OwinContext.Authentication.User.FindFirst("id_token")?.Value;
            if (!string.IsNullOrEmpty(idToken))
            {
                context.ProtocolMessage.IdTokenHint = idToken;
            }
        }
        return Task.FromResult(0);
    },
    // 其他你的通知事件代码...
}

加上这段配置后,当应用发起登出请求时,会自动带上id_token_hint,此时Azure AD B2C会严格验证重定向URI,就算用户改地址栏参数也会被阻止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:48:27