Blazor OAuth2 实现第三方登录的方法


Blazor实现OAuth2第三方登录需依部署模式选择方案:Server模式复用ASP.NET Core服务端流程;WebAssembly托管模式由后端处理OAuth、前端协作重定向;独立模式须用PKCE并选支持OIDC的提供商。

blazor oauth2 实现第三方登录的方法

Blazor 中实现 OAuth2 第三方登录,核心是借助 ASP.NET Core 的身份认证中间件(如 Microsoft.AspNetCore.Authentication.GoogleMicrosoft.AspNetCore.Authentication.GitHub 等),由服务端完成授权码交换和用户信息获取,前端 Blazor(尤其是 Server 或 WebAssembly 托管模式)通过标准重定向流程参与。关键不在于 Blazor 自己“发起 OAuth”,而在于它如何与后端认证体系协同工作。

Server 模式:依赖服务端完整 OAuth 流程

Blazor Server 应用运行在服务器,所有交互走 SignalR,OAuth 登录完全复用传统 ASP.NET Core MVC/Razor Pages 的方式:

  • Program.cs 中注册认证服务并配置第三方提供者(如 GitHub):
  builder.Services.AddAuthentication().AddGitHub(options => {
    options.ClientId = "your-client-id";
    options.ClientSecret = "your-client-secret";
  });
  • 确保启用认证中间件:app.UseAuthentication(); app.UseAuthorization();
  • 提供一个普通 Razor Page(如 Login.razorPages/Login.cshtml)作为登录入口,包含跳转到 /Identity/Account/ExternalLogin?provider=GitHub&returnUrl=/ 的链接
  • 用户点击后,由 ASP.NET Core 自动重定向到 GitHub 授权页 → 用户同意 → GitHub 回调你的 /signin-github(默认路径)→ 框架完成 token 交换、创建 ClaimsPrincipal 并写入 Cookie
  • Blazor 组件中可通过 @inject AuthenticationStateProvider AuthStateProvider 获取当前用户(需继承 RevalidatingServerAuthenticationStateProvider 实现自动刷新)

WebAssembly 托管模式(Hosted):前后端分离下的协作

Blazor WebAssembly 托管应用包含客户端 wasm + 后端 API 项目。OAuth 仍由后端完成,但前端需主动触发重定向并处理回调:

  • 后端(Server 项目)照常配置 GitHub/Google 认证,并暴露一个 API(如 POST /api/auth/login-start?provider=github)返回重定向 URL(或直接 302)
  • 前端 Blazor WASM 调用该 API,拿到授权地址后用 N*igationManager.N*igateTo(url, forceLoad: true) 跳转到 GitHub
  • GitHub 回调后端的 /signin-github,后端验证成功后,应设置好认证 Cookie,并重定向回 Blazor 前端(如 /auth/callback
  • 前端在 /auth/callback 页面(可是一个空的 Callback.razor)中,向后端发起一个受保护的 API 请求(如 /api/auth/user),以触发 Cookie 认证,从而获取当前用户信息并存入本地状态

WebAssembly 独立模式(Standalone):需手动处理 PKCE

纯前端 WASM(无后端)无法安全保管 client_secret,必须使用 PKCE 流程,且需调用第三方的 OIDC 兼容端点(如 GitHub 不原生支持 PKCE,Google/Okta/Azure AD 支持):

施乐在线订单系统 施乐在线订单系统

一套简单的数据库结构的在线订单系统,采用数据库存储格式,方便的实现产品的在线订购,带有后台管理模块用户名为: admin 密码: ojdj22 修改密码方法如下, 更改 ckpwd.asp 中 第三行 if (user="用户名" and pwd="密码") 即可

施乐在线订单系统 0 查看详情 施乐在线订单系统
  • 使用社区库如 Blazor.Auth0 或 Microsoft.Identity.Web 的轻量封装
  • 前端生成 code_verifier/code_challenge,拼接授权 URL(含 response_type=codecode_challenge_method=S256 等参数)
  • 跳转授权页 → 用户同意 → 回调到你的应用(如 /authentication/login-callback)→ 提取 code → 用 code + code_verifier 向令牌端点换 token
  • 将 token 存入 localStorageProtectedSessionStorage,并注入自定义 AuthenticationStateProvider 管理登录态

统一状态管理与用户体验

无论哪种模式,都建议:

  • AuthenticationStateProvider 封装登录/登出逻辑,组件中用 @attribute [Authorize]<authorizeview></authorizeview> 控制内容显示
  • 登出时,Server 模式调用 SignOutAsync() 清除 Cookie;WASM 独立模式清除本地 token 即可
  • 避免在 Blazor 组件中硬编码重定向 URL,提取为配置项(appsettings.json 或环境变量)
  • 对 GitHub 等不支持 PKCE 的 provider,独立 WASM 模式下不推荐直接集成,优先选托管模式或换用支持 OIDC 的平台(如 Azure AD B2C)

基本上就这些。Blazor 本身不替代 OAuth 协议,而是作为 UI 层融入 ASP.NET Core 成熟的身份认证生态。选对部署模式,再匹配对应流程,就能稳妥落地第三方登录。

以上就是Blazor OAuth2 实现第三方登录的方法的详细内容,更多请关注其它相关文章!


# 建设网站政策风险  # 服务端  # 解决办法  # 不规范  # 跳转到  # 复用  # 身份认证  # 桥西区方便网站推广分类  # 会议营销和宣传推广策划  # 回调  # 杭州做推广网站  # 网站建设需要什么书  # 贵阳专业网站推广  # 河北seo软件如何营销  # 优化类分析图网站推荐  # 兰州seo新站优化方案  # 推广部负责网站优化吗  # html  # 重定向  # 第三方  # 环境  # ai  # 后端  # session  # app  # 编码  # cookie  # github  # go  # json  # git  # 前端  # js 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 解决Windows上Composer PATH变量冲突导致的命令无法识别问题  《杖剑传说》食谱大全  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  优化 React onClick 事件处理:函数引用与箭头函数的对比  猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程  微信步数怎么刷_微信步数快速提升技巧  电脑开不了机怎么办 电脑无法开机的解决方法  《理想汽车》权限管理设置方法  支付宝如何解绑云闪付_支付宝与云闪付账户关联解除方法  顺丰快递单号查询寄件人 顺丰寄件人查询入口  J*aScript二进制处理_ArrayBuffer与Blob  J*aScript类型数组_TypedArray使用  荣耀Magic6 Pro拍照成像偏暗_荣耀Magic6 Pro夜景优化  Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】  哈尔滨城市通昵称修改方法  iPhone14无法连接蓝牙设备如何解决  在Flask应用中安全高效地更新SQLAlchemy用户数据  Yandex浏览器官方入口_Yandex搜索引擎中文版  AO3中文入口稳定分享_AO3官网HTTPS看文详解  高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践  从J*a应用程序中导出MySQL表数据的技术指南  Python测试中模块导入路径解析的最佳实践  追剧达人如何发弹幕  C++如何实现单例模式_C++线程安全的单例模式写法  126邮箱申请入口官网_126邮箱注册免费登录2025  《环球网校》设置报考省市方法  《健康大兴》注册方法介绍  圆通快递官方入口不需要登录 在线查询入口快速查询  C++ static关键字作用_C++静态成员变量与静态函数  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  qq邮箱怎么注册_QQ邮箱注册步骤与注意事项  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  mysql如何限制远程访问_mysql远程访问限制方法  微信如何设置字体大小_微信字体设置的阅读舒适  太平年在哪个平台播出  中通快递官网指定查询 中通快递单号查询平台入口  有道AI翻译入口 智能写作官方网站入口  《金山词霸》语音翻译方法  《深林》冬季章节图文攻略  《优志愿》修改手机号方法  Chart.js 教程:自定义插件实现图表与图例间距调整  《梦想世界:长风问剑录》药师一图流分享  《图怪兽》退出登录方法  uc浏览器官网网页版使用 uc浏览器官网免费在线首页  三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧  在PySimpleGUI中实现键盘按键绑定按钮事件  AO3官方镜像链接 | 最新防走失网址永久收藏  德邦快递收费标准详解  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  c++如何掌握指针的核心用法_c++指针入门到精通指南 

 2025-12-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.