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

托管Blazor WebAssembly接入外部Identity Server:服务器API保护指南求助

保护服务器端API:Blazor WASM + Identity Server 4 集成指南

没问题,我来帮你梳理下,当你已经在独立模式的Blazor WebAssembly项目里配置好Identity Server 4(IS4)客户端认证后,怎么保护你的服务器端API。下面是一步步的实操方案:

1. 配置API项目的认证服务

首先在你的服务器端API项目的Program.cs(如果是.NET 5及更早版本则是Startup.cs)中,添加IS4的JWT认证支持:

  • 先注册认证服务,指定使用Bearer方案,配置你的IS4服务器地址作为Authority,同时设置Audience(这个要和你在IS4中配置的API资源名称完全一致)。

代码示例:

builder.Services.AddAuthentication("Bearer")
    .AddJwtBearer("Bearer", options =>
    {
        options.Authority = "https://你的IS4服务器地址";
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateAudience = true,
            ValidAudience = "你的API资源名称" // 必须和IS4里的API资源配置匹配
        };
    });
  • 接着在中间件管道中启用认证和授权,确保这两行代码放在app.UseRouting()之后,app.UseEndpoints()之前:
app.UseAuthentication();
app.UseAuthorization();

2. 在IS4中配置API资源与客户端权限

要让IS4认可你的API并允许Blazor客户端请求访问令牌,你需要在IS4的配置里做两件事:

  • 添加对应的API资源,包含你刚才在API项目里设置的API资源名称
  • 给你的Blazor WASM客户端授予该API资源的访问权限(添加对应的Scope)

示例配置(IS4的Config.cs):

public static IEnumerable<ApiResource> GetApiResources()
{
    return new List<ApiResource>
    {
        new ApiResource("你的API资源名称", "受保护的后端API")
        {
            Scopes = { "api://你的API资源名称" }
        }
    };
}

public static IEnumerable<Client> GetClients()
{
    return new List<Client>
    {
        new Client
        {
            ClientId = "你的Blazor客户端ID",
            // 其他已有的客户端配置(比如Secret、AllowedGrantTypes等)
            AllowedScopes = { "openid", "profile", "api://你的API资源名称" }
        }
    };
}

3. 让Blazor客户端自动携带访问令牌调用API

为了让Blazor在调用API时自动把IS4颁发的访问令牌附加到请求头,你需要在Blazor WASM项目的Program.cs中配置带授权处理的HttpClient:

// 注册一个命名HttpClient,指向你的API地址
builder.Services.AddHttpClient("ProtectedAPI", client =>
    client.BaseAddress = new Uri("https://你的API服务器地址"))
    .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();

// 注册为Scoped服务,方便组件注入使用
builder.Services.AddScoped(sp => 
    sp.GetRequiredService<IHttpClientFactory>().CreateClient("ProtectedAPI"));

之后在Blazor组件中注入这个HttpClient调用API时,就会自动在请求头里带上Authorization: Bearer {访问令牌}。

4. 给API端点添加授权保护

最后,在你需要保护的API控制器或具体Action上添加[Authorize]属性,这样只有携带有效IS4令牌的请求才能访问:

[ApiController]
[Route("api/[controller]")]
[Authorize] // 添加这个属性保护整个控制器
public class ProtectedDataController : ControllerBase
{
    [HttpGet]
    public IActionResult GetProtectedData()
    {
        return Ok("只有认证用户才能看到这条内容");
    }
}

调试小技巧

如果遇到令牌验证失败的问题,可以试试这些方法:

  • 在API项目的appsettings.json中启用认证日志,方便排查错误:
"Logging": {
    "LogLevel": {
        "Microsoft.AspNetCore.Authentication": "Debug"
    }
}
  • 用JWT解析工具查看IS4颁发的令牌内容,确认Audience、Scope等字段是否和你的配置一致。

内容的提问来源于stack exchange,提问作者Black-Pawn-C7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:14:54