.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.
我已经排查的点
- 确认OIDC令牌验证完全成功,日志明确显示
Token validated,且令牌已正常存入分布式缓存; - Cookie认证的
SigningIn、SignedIn事件均正常触发,无报错; - 重定向逻辑无硬编码错误,仅调用
NavigationManager跳转至指定控制器; - 分布式缓存服务运行正常,会话相关配置无问题;
- 所有请求均返回200/302/101等正常状态码,无未处理异常日志。
现在我完全搞不懂:明明令牌验证通过、Cookie也签发完成了,但Blazor应用还是判定用户未认证,进而触发重定向进入死循环。有没有大佬能指点下,我应该从哪些角度进一步排查,或者这个问题可能的根因是什么?
内容来源于stack exchange
相关产品推荐
相关产品推荐

