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

如何保护Blazor WASM调用的Bearer Token认证Minimal API项目?

Blazor WASM + Minimal API 凭证防护方案

浏览器环境下,要完全隐藏Bearer Token是不可能的——只要是前端发起的网络请求,开发者工具都能捕获到请求头。但我们可以通过一系列手段降低Token泄露后的风险,限制滥用,同时保证WASM正常调用API:

  • 缩短Access Token有效期,搭配Refresh Token机制
    把Access Token的有效期设得短一些(比如15-30分钟),就算Token被泄露,可用窗口也很小。同时用Refresh Token来获取新的Access Token,Refresh Token要存在HttpOnly、Secure、SameSite=Strict的Cookie里,这样浏览器JS(包括WASM)无法读取,开发者工具也看不到。
    示例:Minimal API里配置JWT时设置短过期时间:

    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ClockSkew = TimeSpan.FromMinutes(1), // 缩短时钟偏移
                ValidIssuer = builder.Configuration["Jwt:Issuer"],
                ValidAudience = builder.Configuration["Jwt:Audience"],
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
            };
        });
    

    同时后端提供Refresh Token接口,验证Cookie里的Refresh Token后返回新的Access Token。

  • Access Token只存在内存中
    不要把Access Token存在localStorage或sessionStorage里,这些存储可以被JS读取,也容易被XSS攻击窃取。WASM里可以用服务类的私有字段存储Token,页面刷新时再用Refresh Token重新获取,这样Token只在应用运行时存在于内存,关闭页面就消失。

  • 限制Token的权限范围(Scope)
    给每个Token分配最小必要的权限,比如用户的Token只能访问自己的订单、个人资料,不能有修改其他用户数据或系统配置的权限。就算Token被盗,攻击者能做的操作也非常有限。
    示例:生成Token时添加Scope声明:

    var claims = new List<Claim>
    {
        new Claim(ClaimTypes.NameIdentifier, user.Id),
        new Claim("scope", "read:profile"),
        new Claim("scope", "write:own-orders")
    };
    var token = new JwtSecurityToken(
        issuer: issuer,
        audience: audience,
        claims: claims,
        expires: DateTime.UtcNow.AddMinutes(15),
        signingCredentials: signingCredentials);
    

    API接口上用[Authorize(Policy = "RequireReadProfileScope")]来验证Scope。

  • 验证请求来源
    在Minimal API里添加中间件,检查请求的Origin或Referer是否是你的WASM应用域名,拒绝非信任来源的请求。虽然Origin可以被伪造,但能挡住大部分普通攻击者的直接盗用。
    示例中间件:

    app.Use(async (context, next) =>
    {
        var allowedOrigins = new[] { "https://your-wasm-app.com" };
        var origin = context.Request.Headers.Origin.ToString();
        if (!string.IsNullOrEmpty(origin) && !allowedOrigins.Contains(origin))
        {
            context.Response.StatusCode = StatusCodes.Status403Forbidden;
            await context.Response.WriteAsync("Invalid origin");
            return;
        }
        await next();
    });
    
  • 启用API速率限制
    给每个用户或Token设置请求频率限制,比如每分钟最多50次请求,就算Token被盗,攻击者也无法批量调用API造成大规模损失。可以用AspNetCoreRateLimit库来快速配置。

  • IP绑定(高安全场景可选)
    生成Token时把用户的IP地址作为Claim存入,API验证请求的IP和Token里的IP是否一致。但要注意用户可能使用动态IP,会影响正常使用,适合对安全要求极高的场景。

  • 监控异常请求
    记录API的请求日志,设置告警规则——比如同一Token在短时间内从多个IP发起请求、请求频率突然飙升等,一旦检测到异常就立即失效该Token。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:35:32