Azure AD 登录在重定向时中断

问题描述 投票:0回答:1

我有一个相当标准的设置,涉及一个由 Azure 应用服务托管、通过 Cloudflare 代理的 ASP.NET Core 应用程序。

此扩展方法是在通常的样板 ASP.NET Core 身份代码之后调用的,该代码还配置了 cookie:

internal static AuthenticationBuilder AddAzureAd(this AuthenticationBuilder authenticationBuilder, IConfiguration config)
{
    void configureMicrosoftIdentityOptions(OpenIdConnectOptions options)
    {
        options.Authority = config["xxx:Authority"];
        options.ClientId = config["xxx:ClientId"];
        options.ClientSecret = config["xxx:ClientSecret"];
        options.SignInScheme = IdentityConstants.ApplicationScheme;
        options.ResponseType = OpenIdConnectResponseType.IdToken;
        options.Prompt = "select_account";
    
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = false,
            ValidAudience = config["xxx:ClientId"],
        };
    };

    return authenticationBuilder.AddOpenIdConnect("AzureAD", configureMicrosoftIdentityOptions);
}

public static AuthenticationBuilder AddCookieLogin(this AuthenticationBuilder authenticationBuilder)
{
    void configureCookieAuthOptions(CookieAuthenticationOptions options)
    {                
        options.Cookie.Name = "MyApp";
        options.Cookie.IsEssential = true;
        options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
        options.ExpireTimeSpan = TimeSpan.FromDays(1);
        options.SlidingExpiration = true;
        options.LoginPath = "/signin";
    }

    return authenticationBuilder.AddCookie(configureCookieAuthOptions);
}

整个过程通过一个简单的控制器操作开始:

return Challenge(new AuthenticationProperties { RedirectUri = "/" }, scheme);

Azure AD 应用程序注册中没有任何需要报告的特殊情况。重定向 URI 设置为

{MYURIHERE}/signin-oidc
。这一切在本地运行得很好。在我的日志中,我发现 Azure AD 确实返回应用程序并登录用户(“AuthenticationScheme:xxx 已登录。”)并从
signin-oidc
端点重定向到请求的重定向 URI。

但是,在 Azure 应用服务上启用代理后,“有时”会出现浏览器在登录 Azure AD 后似乎卡住的情况。这是有问题的 URL,它会冻结,直到引发超时:

https://login.microsoftonline.com/common/reprocess?ctx=xxx0&sessionid=yyy

日志仍然显示“AuthenticationScheme:xxx 已登录”。但在此条目后停止记录:

Request finished HTTP/1.1 POST XXX/signin-oidc - 302 0 - 1014.6661ms

出于某种未知的原因,在启动 Azure AD 身份验证过程之前按 CTRL + F5 似乎可以修复该问题。我已经尝试了各种组合来设置 cookie,甚至在登录页面加载之前设置“清除站点数据”标头。

无济于事,所以我没有主意,想知道是否还有其他我可以尝试的方法。奇怪的是,另一个使用 Azure 上的内置身份验证方法的 ASP.NET Core Web 应用程序没有此问题,因为它也恰好由 Cloudflare 代理。所以这肯定是我的代码中的问题,而不是 Cloudflare、Azure 应用服务或其他任何问题。

azure asp.net-core azure-active-directory openid-connect cloudflare
1个回答
0
投票

根据您提供的代码和信息,您在使用 Cloudflare 作为代理通过 Azure 应用服务访问您的应用程序时,似乎遇到了 Azure AD 登录过程卡住的问题。

出现此行为的一个可能原因可能与 Azure AD 登录流和 Cloudflare 之间的身份验证 Cookie 处理方式有关。 Cloudflare 可能会干扰 cookie 处理并导致登录过程冻结。

要解决此问题,您可以尝试以下建议:

绕过 Cloudflare:暂时禁用您的应用程序的 Cloudflare 代理,并查看在没有它的情况下 Azure AD 登录过程是否正常工作。这将有助于确定是否是 Cloudflare 导致了问题。

检查 Cookie 配置:检查您的 Cookie 配置并确保其符合 Azure AD 和 Cloudflare 的要求。确保 cookie 名称、路径和设置一致且兼容。

验证重定向 URI:仔细检查 Azure AD 应用程序注册中配置的重定向 URI。确保它们与您的应用程序使用的正确 URI 匹配,包括 Cloudflare 添加的任何前缀或后缀。

检查网络流量:使用浏览器开发工具或Fiddler等工具检查登录过程中的网络流量。查找任何异常请求、重定向或错误,这些可能会为问题提供更多见解。

查看 Cloudflare 设置:检查您的 Cloudflare 设置,尤其是有关缓存、安全功能和页面规则的设置。某些配置可能会干扰身份验证流程。

升级 Azure AD SDK:确保您使用的是最新版本的 Azure AD SDK 及相关依赖项。升级到最新版本可能会解决任何已知问题或兼容性问题。

联系 Azure 支持:如果上述步骤都无法解决问题,请考虑联系 Microsoft Azure 支持。他们可以提供特定于 Azure 应用服务和 Azure AD 集成的进一步指导和帮助。

请注意,解决此类问题可能很复杂,并且可能需要在提供的信息之外进行其他调查。

Upwork 的大卫·卢卡斯

© www.soinside.com 2019 - 2024. All rights reserved.