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

如何为混合Blazor Server应用与Minimal API配置独立身份验证

实现Blazor Server与Minimal API的独立身份验证配置

你的Blazor Server已配置Windows身份验证(Negotiate方案),要给Minimal API单独配置Basic身份验证和匿名访问,需注册多身份验证方案并配置针对性的授权策略,具体步骤如下:

1. 注册多身份验证方案

在Program.cs中保留原Negotiate配置,同时添加Basic身份验证方案。示例用内存用户存储验证逻辑(实际项目可替换为数据库/AD等真实验证源):

// 保留Blazor的Windows身份验证配置
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    .AddNegotiate();

// 添加Basic身份验证方案
builder.Services.AddAuthentication()
    .AddBasic("BasicAuthScheme", options =>
    {
        options.Events = new BasicAuthenticationEvents
        {
            OnValidateCredentials = async context =>
            {
                // 替换为你的实际用户验证逻辑
                if (context.UserName == "admin" && context.Password == "yourSecurePassword")
                {
                    var claims = new[]
                    {
                        new Claim(ClaimTypes.Name, context.UserName),
                        new Claim(ClaimTypes.Role, "Admin")
                    };
                    context.Principal = new ClaimsPrincipal(new ClaimsIdentity(claims, "BasicAuthScheme"));
                    context.Success();
                }
            }
        };
    });

注:若项目未引用Microsoft.AspNetCore.Authentication.Basic包,需先通过NuGet安装。

2. 配置授权策略

调整授权配置,新增Basic Auth专属策略,同时保留Blazor的默认Windows身份验证策略:

builder.Services.AddAuthorization(options =>
{
    // Blazor默认策略:使用Negotiate方案(Windows身份验证)
    options.DefaultPolicy = new AuthorizationPolicyBuilder(NegotiateDefaults.AuthenticationScheme)
        .RequireAuthenticatedUser()
        .Build();

    // Basic Auth专属策略:指定使用BasicAuthScheme
    options.AddPolicy("BasicAuthPolicy", policy =>
    {
        policy.AddAuthenticationSchemes("BasicAuthScheme")
              .RequireAuthenticatedUser();
    });
});

3. 为Minimal API端点指定身份验证规则

定义API端点时,通过特性或Fluent API明确对应的授权规则:

匿名访问端点

app.MapGet("/api/public", () => Results.Ok("这是公开访问的API"))
   .AllowAnonymous();

需要Basic身份验证的端点

app.MapGet("/api/secure", (ClaimsPrincipal user) => Results.Ok($"当前登录用户:{user.Identity.Name}"))
   .RequireAuthorization("BasicAuthPolicy");

Blazor页面身份验证保持不变

Blazor组件和页面会自动沿用默认的Negotiate方案(Windows身份验证),无需额外修改——因为我们将DefaultPolicy设置为Negotiate专属策略,且FallbackPolicy继承了该默认规则。

关键说明

  • 多身份验证方案通过不同Scheme区分,Blazor用默认的Negotiate,API用自定义的BasicAuthScheme,实现两者身份验证隔离。
  • 授权策略可精准控制端点的身份验证要求,避免相互干扰。
  • 实际项目中务必替换Basic Auth的硬编码验证逻辑,对接真实用户系统,保障安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:06:10