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

.NET 8 Blazor Server应用OIDC/Cookie认证偶发无限重定向循环问题排查求助

.NET 8 Blazor Server应用OIDC/Cookie认证偶发无限重定向循环问题排查求助

各位好,我最近碰到了一个偶发的棘手问题:我的.NET 8 Blazor Server应用对接外部OIDC身份提供商(IdP)时,绝大多数情况下认证流程都正常,但偶尔用户登录时会直接陷入无限重定向循环,完全无法进入应用。我已经梳理了代码和日志,但始终找不到根因,想请大家帮忙分析下。

核心代码配置

App.razor 结构

我的App.razor主要是级联值、路由和授权跳转逻辑,代码如下:

<CascadingValue Value="@ShowBanner">
    <CascadingValue Value="@ConsentCookie">
        <CascadingValue Value="@Tenant" IsFixed="true">
            <Router AppAssembly="@typeof(Program).Assembly">
                <Found Context="routeData">
                    <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
                        <NotAuthorized>
                            <RedirectToLogin />
                        </NotAuthorized>
                    </AuthorizeRouteView>
                </Found>
                <NotFound>
                    <LayoutView Layout="@typeof(LoginLayout)">
                        <Unauthorized Message="Not found" />
                    </LayoutView>
                </NotFound>
            </Router>
        </CascadingValue>
    </CascadingValue>
</CascadingValue>

认证相关逻辑说明

  • RedirectToLogin是个简单的Razor组件,仅通过NavigationManager跳转到Account\Login这个控制器Action;
  • OIDC配置里,我只在OidcEvents.TokenValidated事件里把令牌存到了分布式缓存,没有在SigningIn或SignedIn事件里加任何自定义逻辑;
  • Cookie认证的CookieEvents仅用于记录日志,没有其他业务逻辑。

循环时的重复日志

当出现无限循环时,日志会持续重复以下内容,全程没有任何异常抛出:

[INF] [RequestLoggingMiddleware] HTTP GET responded 200 in 449,3090 ms
[INF] [RequestLoggingMiddleware] HTTP GET /_framework/blazor.server.js responded 304 in 10,1446 ms
[INF] [RequestLoggingMiddleware] HTTP GET /_blazor/initializers responded 200 in 9,0249 ms
[INF] [RequestLoggingMiddleware] HTTP POST /_blazor/negotiate responded 200 in 10,8939 ms
[DBG] [App.OnInitializedAsync] User authenticated: False
[DBG] [RedirectToLogin.OnInitialized] Redirecting to login page, forcing load
[DBG] [AccountController.Login] Challenge with redirect to: /Shop
[INF] [RequestLoggingMiddleware] HTTP GET /Account/Login responded 302 in 105,2844 ms
[DBG] [App.OnAfterRenderAsync] Check if tenant license is still valid
[INF] [RequestLoggingMiddleware] HTTP GET /_blazor responded 101 in 557,2601 ms
[DBG] [OidcEvents.TokenValidated] Token validated and stored for user: Ivan Debono
[DBG] [CookieEvents.SigningIn] Signing in with cookie authentication.
[DBG] [CookieEvents.SignedIn] Signed in to cookie authentication.

我已经排查的点

  1. 确认OIDC令牌验证完全成功,日志明确显示Token validated,且令牌已正常存入分布式缓存;
  2. Cookie认证的SigningIn、SignedIn事件均正常触发,无报错;
  3. 重定向逻辑无硬编码错误,仅调用NavigationManager跳转至指定控制器;
  4. 分布式缓存服务运行正常,会话相关配置无问题;
  5. 所有请求均返回200/302/101等正常状态码,无未处理异常日志。

现在我完全搞不懂:明明令牌验证通过、Cookie也签发完成了,但Blazor应用还是判定用户未认证,进而触发重定向进入死循环。有没有大佬能指点下,我应该从哪些角度进一步排查,或者这个问题可能的根因是什么?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 12:39:33