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

.NET 5 Blazor Server配置安全场景后启动无默认认证方案报错求助

问题修复方案

你遇到的报错信息如下:

No authenticationScheme was specified, and there was no DefaultAuthenticateScheme found

错误原因

核心问题是没有在服务容器中注册完整的认证服务,也没有配置默认认证方案,同时缺少必要的认证、授权中间件。

修复步骤

  • 补全ConfigureServices方法中的认证、授权服务注册
    你之前只配置了OpenIdConnect的选项,没有真正注入AzureAD认证服务,需要添加如下代码:
// 注册AzureAD认证服务并指定默认认证方案
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
    .AddAzureAD(options => Configuration.Bind("AzureAd", options));
// 注册授权服务
services.AddAuthorization();
  • 调整Configure方法的中间件顺序,在路由和端点之间添加认证、授权中间件:
app.UseRouting();

// 必须添加这两个中间件,顺序不能颠倒
app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapBlazorHub().RequireAuthorization(
        new AuthorizeAttribute
        {
            AuthenticationSchemes = AzureADDefaults.AuthenticationScheme
        });
    // 首页回退路由也需要加授权,避免未认证时执行GetTokenAsync报错
    endpoints.MapFallbackToPage("/_Host").RequireAuthorization();
});
  • 确认appsettings.json中已经配置了正确的AzureAD参数,示例如下:
"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "你的租户域名",
  "TenantId": "你的租户ID",
  "ClientId": "你的应用客户端ID",
  "ClientSecret": "你的应用客户端密钥",
  "CallbackPath": "/signin-oidc"
}

修改后的完整Startup.cs示例

using BlazorServerSaveToken.Data;
using Microsoft.AspNetCore.Authentication.AzureAD.UI;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;

namespace BlazorServerSaveToken
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            // 新增:注册AzureAD认证服务,指定默认认证方案
            services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
                .AddAzureAD(options => Configuration.Bind("AzureAd", options));
            
            services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
            {
                options.ResponseType = OpenIdConnectResponseType.Code;
                options.SaveTokens = true;
                options.Scope.Add("offline_access");
            });
            
            // 新增:注册授权服务
            services.AddAuthorization();
            
            services.AddHttpClient();
            services.AddScoped<TokenProvider>();

            services.AddRazorPages();
            services.AddServerSideBlazor();
            services.AddSingleton<WeatherForecastService>();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
            }

            app.UseStaticFiles();

            app.UseRouting();
            
            // 新增:认证、授权中间件,顺序不可调整
            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapBlazorHub().RequireAuthorization(
                    new AuthorizeAttribute
                    {
                        AuthenticationSchemes = AzureADDefaults.AuthenticationScheme
                    });
                // 调整:给首页回退路由增加授权要求
                endpoints.MapFallbackToPage("/_Host").RequireAuthorization();
            });
        }
    }
}

内容的提问来源于stack exchange,提问作者Ali Poustdouzan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:15:00