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

.NET 6 Blazor Server迁移至.NET 8 Blazor Web App架构问询

Blazor Web App InteractiveAuto模式最佳安全实践方案

核心问题解答

1. InteractiveAuto模式下是否需要Web API?

是的,必须通过Web API隔离服务端逻辑。当组件以客户端交互模式运行时,直接引用包含Dapper、ASP.NET Identity的类库会把数据库连接字符串、数据访问逻辑、业务规则全部打包到客户端(WebAssembly),用户可通过浏览器工具下载并反编译,存在严重的敏感信息泄露风险。你之前直接引用类库的方式虽然能运行,但安全性极低,不建议在生产环境使用。

2. 能否将Blazor Web App服务器项目配置为API?

完全可以,Blazor Web App的服务器项目本身就是标准ASP.NET Core应用,无需单独搭建API项目:

  • 在服务器项目中创建Controllers文件夹,添加继承ControllerBase的API控制器,注入你的业务类库服务,暴露CRUD接口示例:
[ApiController]
[Route("api/[controller]")]
[Authorize]
public class ProductsController : ControllerBase
{
    private readonly IProductService _productService;

    public ProductsController(IProductService productService)
    {
        _productService = productService;
    }

    [HttpGet]
    public async Task<IActionResult> GetAll()
    {
        var products = await _productService.GetAllAsync();
        return Ok(products);
    }
}
  • 在服务器项目的Program.cs中确保已添加API支持:
builder.Services.AddControllers();
// ...
app.MapControllers(); // 放在app.MapRazorComponents()前后均可

3. Web API的认证与授权怎么处理?

直接复用现有ASP.NET Identity体系即可,无需额外搭建认证系统:

  • 服务器项目中确保已配置Identity和Cookie认证(默认Blazor Web App模板已包含):
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie();
builder.Services.AddAuthorization();
// ...
app.UseAuthentication();
app.UseAuthorization();
  • 在API控制器或Action上添加[Authorize]属性,和Blazor组件的授权规则保持一致,比如[Authorize(Roles = "Admin")]限制管理员访问。

4. InteractiveAuto组件中如何免凭证调用API?

用户登录Blazor应用后,浏览器会保存认证Cookie,客户端组件通过HttpClient发请求时会自动携带该Cookie,无需再次输入凭证:

  • 在客户端项目的Program.cs中配置HttpClient:
builder.Services.AddScoped(sp => new HttpClient 
{ 
    BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) 
});
  • 在组件中注入HttpClient并调用API:
@inject HttpClient Http
@code {
    private List<Product> products;

    protected override async Task OnInitializedAsync()
    {
        products = await Http.GetFromJsonAsync<List<Product>>("api/products");
    }
}

HttpClient会自动携带当前用户的认证Cookie,服务器端认证中间件会自动验证身份,实现无感知认证。

最佳安全方案总结

  1. 严格隔离服务端逻辑:仅在服务器项目中引用包含数据访问、业务规则的类库,客户端项目通过API调用服务端功能,避免敏感代码暴露。
  2. 复用Identity认证体系:统一使用ASP.NET Identity处理登录、授权,客户端通过Cookie自动传递身份信息,无需额外凭证管理。
  3. 细粒度授权控制:在API控制器、Blazor组件上统一使用[Authorize]系列属性,确保权限规则一致。
  4. 验证API请求合法性:在API中额外校验用户Claims,比如限制用户只能访问自己创建的数据,防止越权操作。
  5. 避免客户端敏感配置:绝对不要在客户端项目中存储数据库连接字符串、密钥等敏感信息,所有敏感配置仅保留在服务器端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:53:14