Blazor WebApp-Server&AuthenticationSchemes报错

目录

背景描述

集成到现有系统中,系统使用了Cookie作为鉴权方式,已有一个scheme正常业务使用。为接入开发工具,隔离现有scheme,另起一个DevTools Scheme,独立使用。集成Blazor为Blazor WebApp Server模式。

项目设置

  1. 在鉴权服务扩展,在已有scheme基础上扩展新scheme并简单设定其配置。
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        //...
    })
    .AddCookie("DevTools",options =>
    {
        options.Cookie.Name = "DevTools";
        options.Cookie.MaxAge = TimeSpan.FromMinutes(30);
        options.LoginPath = "/login";
        options.AccessDeniedPath = "/access-denied";
    })
  1. Blazor页面设置Authorize特性,按照Blazor页面授权检查,在Blazor Page上标记Authorize。
@page "/counter"
@attribute [Authorize]
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.Authorization

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>
  1. 从Authorize设定方式来讲,常规Asp.Net Core WebApi的用法应该也能够用于Blazor,因此设定如下方式。
@page "/counter"
@attribute [Authorize(AuthenticationSchemes = "DevTools")]
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.Authorization

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>
  1. 调试该页面,未登录下能够按照Schemes要求正常跳转到登录页。

  2. 然而,当进入到该页面时,提示报错:

The authorization data specifies an authentication scheme with value 'DevTools'. Authentication schemes cannot be specified for components.

根据堆栈内容找到其源码位于如下链接,从其错误来看,无法在组件上标记特定schema。 https://source.dot.net/#Microsoft.AspNetCore.Components.Authorization/AuthorizeViewCore.cs,116

解决方案

依据源码设定,无法在组件层面标记Scheme。从Github找到方案,替换成全局设定Scheme。

https://github.com/dotnet/aspnetcore/issues/14916#issuecomment-541162620

204123558_d22f336b-1a90-43e9-a98c-8d757bb42cba 所有原有加了Authorize[AuthenticationSchemes = “DevTools”]都可以去掉了,默认Blazor所有页面都受控制,如果想要特定页面(比如登录页)可以匿名访问,加上特性。

@attribute [AllowAnonymous]

参考文档

https://learn.microsoft.com/en-us/aspnet/core/blazor/security/?view=aspnetcore-9.0&tabs=visual-studio#authorize-attribute

https://learn.microsoft.com/zh-cn/aspnet/core/blazor/security/additional-scenarios?view=aspnetcore-9.0#set-the-authentication-scheme

2025-10-15,望技术有成后能回来看见自己的脚步。