用途
该技能用于在 Blazor 应用中实现身份认证与授权,范围覆盖所有 Blazor 托管模型。它是 Blazor 特有认证 UI 模式的权威来源,包括 AuthorizeView、CascadingAuthenticationState、Identity UI 脚手架、客户端令牌处理,以及按托管模型配置认证流程。
作用边界:API 级认证(JWT、OAuth/OIDC、passkeys、CORS、限流)不属于本技能,应参考 dotnet-api-security。同样不在范围内的还有:JWT 令牌生成与验证、OWASP 安全原则、认证组件的 bUnit 测试、端到端认证测试、UI 框架选型。
各托管模型的认证流程差异
不同 Blazor 托管模型的认证模式差异显著,技能以对照方式说明以下维度:
- 认证机制:InteractiveServer 使用基于 Cookie 的服务端认证;InteractiveWebAssembly 使用令牌(JWT/OIDC);InteractiveAuto 在 Server 阶段用 Cookie、在 WASM 阶段用令牌;Static SSR 使用标准 ASP.NET Core 的 Cookie 认证;Hybrid 使用平台原生方式或 Cookie。
- 用户状态访问:InteractiveServer 可直接访问 HttpContext;InteractiveWebAssembly 使用 AuthenticationStateProvider;InteractiveAuto 随阶段变化;Static SSR 使用 HttpContext;Hybrid 使用平台认证 API。
- 令牌存储:InteractiveServer 与 Static SSR 不需要(使用 Cookie);WASM 使用 localStorage 或 sessionStorage;Auto 从 Cookie 过渡到令牌;Hybrid 使用安全存储(如 Keychain)。
- 刷新处理:InteractiveServer 依赖电路重连;WASM 通过拦截器刷新令牌;Auto 自动处理;Static SSR 使用标准 Cookie 续期;Hybrid 依平台而定。
主要能力
- 服务端认证配置:在 Program.cs 中通过 AddAuthentication 与 AddCookie 配置登录路径与拒绝访问路径,并使用 AddCascadingAuthenticationState 与 AddAuthorization。
- WASM 令牌认证:通过 AddOidcAuthentication 配置 Authority、ClientId、ResponseType 与默认作用域,并使用 AuthorizationMessageHandler / BaseAddressAuthorizationMessageHandler 为请求自动附加令牌。
- Auto 模式双重处理:同时注册 Cookie 与 JwtBearer,以覆盖从 Server 到 WASM 的过渡。
- Hybrid(MAUI)认证:注册 AuthorizationCore 与自定义 AuthenticationStateProvider,通过安全存储读取令牌并解析 JWT 声明。
- AuthorizeView:按认证与授权状态条件渲染内容,支持 Authorized、NotAuthorized、Authorizing 分区,以及基于角色(Roles)与基于策略(Policy)的用法。
- CascadingAuthenticationState:以级联参数方式向子组件提供当前 AuthenticationState;.NET 8+ 推荐使用服务注册方式(AddCascadingAuthenticationState)替代包裹整个应用的旧写法。组件中可通过 [CascadingParameter] Task<AuthenticationState> 读取用户、声明、角色等信息。
- Identity UI 脚手架:添加 Microsoft.AspNetCore.Identity.EntityFrameworkCore 与 Microsoft.AspNetCore.Identity.UI 包,配置 DbContext 与 AddIdentity,并通过 dotnet aspnet-codegenerator identity 脚手架生成指定页面(如 Account.Login、Account.Register、Account.Logout)。也可用 Blazor 组件调用 Identity API 实现原生登录体验,示例包含 EditForm、DataAnnotationsValidator、SignInManager.PasswordSignInAsync 及两步验证、锁定等分支处理。
- 角色与策略授权:页面级使用 [Authorize(Roles = "...")] 或 [Authorize(Policy = "...")];通过 AddAuthorizationBuilder 定义策略,支持 RequireRole、RequireClaim、RequireAuthenticatedUser 与自定义要求;可编写自定义 AuthorizationHandler(如最低年龄要求示例),并使用 IAuthorizationService 在组件中执行程序化授权检查。
- 外部身份提供方:配置 Microsoft 与 Google 等外部提供方;并给出各托管模型下的外部登录流程差异(Server/Static SSR 使用标准 OAuth 重定向并在回调后写 Cookie;WASM 使用带 PKCE 的客户端 OIDC 并将令牌存于浏览器;Hybrid 使用 WebAuthenticator 或 MSAL 与平台安全存储)。
使用方式
技能文档以代码示例为主要形式,展示 Program.cs 服务注册、组件标记(AuthorizeView、@attribute [Authorize])、Identity API 调用、策略与处理器定义,以及外部提供方配置。前置条件包括 .NET 8.0+、Microsoft.AspNetCore.Identity.EntityFrameworkCore、Microsoft.AspNetCore.Identity.UI、Microsoft.AspNetCore.Authentication.MicrosoftAccount/.Google、Microsoft.Authentication.WebAssembly.Msal 等包。
适用场景
适用于需要在 Blazor Web App、Blazor Server、Blazor WebAssembly、Blazor Hybrid(MAUI)等托管模型中实现登录登出、基于角色或策略的访问控制、Identity 页面定制化、外部登录(Microsoft、Google、OIDC)等认证授权需求的开发场景。
限制与注意事项
技能列出的常见陷阱包括:不要在交互式组件中访问 HttpContext(电路建立后为 null,应改用 AuthenticationStateProvider 或 CascadingAuthenticationState);不要在 WASM 中跨域或委托 API 场景依赖 Cookie(应使用 OIDC/JWT 与 AuthorizationMessageHandler,同源与 BFF 的 Cookie 认证仍然有效);不要在交互模式下渲染登录/登出页面(SignInManager 需要 HttpContext 设置或清除 Cookie,必须使用 Static SSR 渲染模式);不要忽视 localStorage 存储令牌的 XSS 风险(可考虑 sessionStorage 或 OIDC 库配合 PKCE 的内置存储);不要忘记 AddCascadingAuthenticationState(),否则 [CascadingParameter] Task<AuthenticationState> 始终为 null 且认证检查会静默失效;不要同时使用 AddIdentity 与 AddDefaultIdentity(后者包含 UI 脚手架,前者不包含,需按是否需要默认 Identity UI 页面二选一)。
关于收费、价格、平台支持范围等事实,资料中暂未提供。