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

Electron使用Microsoft设备码认证返回invalid_request错误如何解决?

错误根因

你遇到的AADSTS90023报错本质是Electron运行环境的差异导致的:

  • 你在Node环境直接运行代码时,网络请求走Node.js原生HTTP栈,没有跨域资源共享(CORS)校验逻辑,所以请求可以正常通过。
  • 你在Electron渲染进程里运行fetch请求时,走的是Chromium内核的浏览器网络栈,会自动带上CORS相关校验头,微软Azure AD的令牌接口识别到这是跨域请求后,要求你的应用注册类型必须是「单页应用(SPA)」才允许跨域兑换令牌,否则就抛出这个错误。

可行解决方案

方案1:将令牌轮询逻辑移到Electron主进程(最推荐)

Electron主进程的网络请求走Node.js栈,无CORS限制,完全兼容你现有逻辑,只需要做少量逻辑拆分:

  1. 渲染进程拿到device_code后,通过IPC接口把device_code发送给主进程
  2. 主进程执行你原有的令牌轮询逻辑,拿到access_token、refresh_token后再通过IPC返回给渲染进程使用
    这个方案不需要修改你Azure应用的注册配置,也不会降低应用安全性。

方案2:修改Azure应用注册类型为单页应用

如果你不想拆分主进程逻辑,可以登录Azure门户调整你的应用配置:

  1. 找到你client_id对应的应用注册
  2. 在「身份验证」页中,将平台类型修改为「单页应用」
    注意:修改为SPA类型后,refresh_token默认有效期会缩短至24小时,且无法使用需要客户端密钥的相关能力,仅适合纯前端认证的场景。

方案3:关闭渲染进程web安全校验(不推荐)

如果是个人测试用的非正式应用,可以在创建BrowserWindow时关闭web安全配置,跳过CORS校验:

const mainWindow = new BrowserWindow({
  webPreferences: {
    webSecurity: false // 仅测试用,正式环境不要开启
  }
})

这个方案会导致整个应用的浏览器安全校验失效,有被恶意脚本注入、跨域请求泄露数据的风险,不建议在正式发布的应用中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:48:04