ASP.NET Core Blazor中[Authorize]属性无法限制未授权用户访问页面
你的核心问题是仅添加[Authorize]属性不足以触发Blazor的页面拦截逻辑,还需要配置路由层面的授权组件,同时确保中间件顺序正确。以下是具体解决步骤:
1. 配置App.razor的授权路由结构
在App.razor中,用<CascadingAuthenticationState>包裹整个路由体系,并替换默认的<RouteView>为<AuthorizeRouteView>,这样才能让[Authorize]属性的拦截规则生效:
<CascadingAuthenticationState> <Router AppAssembly="@typeof(App).Assembly"> <Found Context="routeData"> <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)"> <NotAuthorized> <!-- 未授权时自动跳转登录页 --> <RedirectToLogin /> </NotAuthorized> </AuthorizeRouteView> <FocusOnNavigate RouteData="@routeData" Selector="h1" /> </Found> <NotFound> <PageTitle>未找到页面</PageTitle> <LayoutView Layout="@typeof(MainLayout)"> <p role="alert">抱歉,该地址不存在内容。</p> </LayoutView> </NotFound> </Router> </CascadingAuthenticationState>
2. 创建RedirectToLogin组件
新建RedirectToLogin.razor组件,用于处理未授权时的登录跳转逻辑:
@inject NavigationManager NavigationManager @code { protected override void OnInitialized() { // 记录当前页面地址,作为登录后的返回地址 var returnUrl = NavigationManager.Uri; NavigationManager.NavigateTo($"Identity/Account/Login?returnUrl={Uri.EscapeDataString(returnUrl)}", forceLoad: true); } }
3. 修正Program.cs的中间件顺序
确保UseAuthentication和UseAuthorization在MapBlazorHub之前执行,中间件顺序错误会导致授权逻辑失效:
var builder = WebApplication.CreateBuilder(args); // ... 你的AddIdentity等服务配置 ... var app = builder.Build(); // ... 静态文件等其他中间件 ... app.UseRouting(); // 认证、授权中间件必须放在路由之后,MapBlazorHub之前 app.UseAuthentication(); app.UseAuthorization(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); app.Run();
4. 检查_Imports.razor的命名空间导入
确保在_Imports.razor中导入授权相关命名空间,否则@attribute [Authorize]无法被编译器识别:
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization
5. 验证[Authorize]属性的使用
完成上述配置后,无论在Razor页面添加@attribute [Authorize],还是在代码后置类添加[Authorize]属性,都会正常生效:
- Razor页面写法:
@page "/users" @attribute [Authorize]
- 代码后置类写法:
using Microsoft.AspNetCore.Authorization; [Authorize] public partial class UserList { // ... 类逻辑 ... }
完成以上配置后,未登录用户访问/users页面时会自动跳转到登录页,登录完成后将返回原页面。
内容的提问来源于stack exchange,提问作者DreamingOfSleep
相关产品推荐
相关产品推荐

