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

.NET 8.0下实现Blazor WASM第三方认证并验证后端请求的最简方案

问题:Blazor WebAssembly(.NET 8)结合Google第三方认证实现后端API请求验证

背景与初始尝试

我正在用.NET 8开发Blazor WebAssembly站点,需求是通过Google等第三方认证实现用户登录,同时要验证WASM前端向自有后端发起的API请求。不需要用户名密码认证,也不想用ASP.NET Identity把用户账户存到SQL数据库。

微软相关文档逻辑混乱,既有关于认证库使用的指南,也有通过VS模板创建Blazor Web App后指向的第三方认证文档,二者指引完全不同。.NET 8的Blazor Web App模板也让人困惑,选了WebAssembly模式后,生成的解决方案包含服务器端ASP.NET项目和WASM项目,原以为是纯WASM项目,实际是带交互式WASM渲染模式的Blazor Server项目,这让我搞不清方向。

后来调整后让Google认证部分可用,服务器端Program.cs的关键配置如下:

builder.Services.AddAuthentication()
    .AddGoogle(options =>
    {
        IConfigurationSection googleAuthNSection =
            builder.Configuration.GetSection("Authentication:Google");
        options.ClientId = googleAuthNSection["ClientId"];
        options.ClientSecret = googleAuthNSection["ClientSecret"];
    });

能正常跳转到Google认证页面完成登录,也能读取令牌声明,但认证信息只在WASM端可用,后端处理API请求时HttpContext拿不到该信息,而且WASM端获取不到实际令牌,没法把签名令牌传给后端做可靠认证——这是必须实现的功能。

我可以放弃现有原型,从新模板开始,想知道:实现Blazor WASM应用+第三方认证(如Google)+后端请求验证的最简方式是什么?考虑过的方案:

  • 独立Blazor WASM应用,获取JWT令牌后传给后端,由后端验证
  • .NET 8带渲染模式的Blazor应用,登录页服务器端渲染,主体WASM端,服务器端注册认证实现交互——但不确定这条路是否可行
  • 其他方案

更新1:独立WASM模板的问题

用独立Blazor WebAssembly模板重新开始,按认证库指南配置后,认证仍有问题:

  • 无法在options.ProviderOptions.DefaultScopes.Add("{SCOPE URI}");中配置自定义作用域,一添加就提示「invalid scope」错误,似乎只允许用Google API的URI作为作用域,没法给自有应用定义作用域
  • 拿不到可用于API请求的访问令牌,推测和没定义自定义作用域有关
  • 认证库似乎只支持request_type为「id_token」的情况,改成「token」后,浏览器能看到Google返回了JWT令牌,但认证库无法处理,登录流程直接卡住

更新2:关键发现

折腾几天后的几点发现:

  • 用response_type为「id_token token」时,Google返回的「访问令牌」是无效的签名JWT令牌,格式错误,没法通过任何JWT验证,搞不懂Google为什么返回这种东西
  • 找到一种方法:在Google回调返回Blazor应用时,从URL里手动提取有效的id令牌——离谱的是居然没有API能获取这个令牌,但手动提取后,把它放到后端请求里,后端能轻松验证
  • 吐槽Google返回无效令牌,吐槽微软API设计和误导性文档

等整理好后会把解决方案做成项目模板,感兴趣可以告知。

核心需求

  • 实现客户端Google登录
  • 获取JWT令牌
  • 能查看JWT令牌中的声明(姓名、用户ID)
  • 向后端API请求时携带JWT作为Bearer令牌
  • 后端能合理验证JWT并查看声明

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:47:34