访问Google Drive时出现Error 400: redirect_uri_mismatch错误如何解决?
问题根因
你出现这个错误的核心原因是授权类使用场景不匹配:
你调用的GoogleWebAuthorizationBroker.AuthorizeAsync是谷歌官方为桌面/控制台应用设计的授权方法,它会自动启动一个本地随机端口的HTTP监听器来接收授权回调,完全忽略你在凭证JSON、谷歌云控制台配置的重定向URI,这就是你看到授权请求里的重定向地址端口每次随机变化的原因。
你当前创建的是Web类型的OAuth凭证,这类凭证要求所有回调地址必须预先在谷歌云控制台配置,不允许使用未登记的随机端口地址,所以直接触发redirect_uri_mismatch错误。
解决方案
根据你的使用场景二选一即可:
场景1:仅本地调试、不需要部署到公网
- 打开谷歌云控制台,将当前OAuth凭证的类型从「Web应用」修改为「桌面应用」,或者直接新建一个桌面类型的OAuth凭证
- 下载新的桌面类型凭证JSON替换原有文件
- 删除
FileDataStore配置的tokenPath路径下所有缓存的凭证文件,避免旧缓存干扰 - 重新运行调试即可,桌面类型凭证允许
GoogleWebAuthorizationBroker使用随机端口的本地回调地址,不需要预先配置
场景2:站点需要部署到公网线上使用
Web类型凭证本身是正确的,但你不能使用GoogleWebAuthorizationBroker做授权,需要改用ASP.NET Core标准的OAuth认证流程:
- 删掉现有
GoogleWebAuthorizationBroker相关的授权代码 - 在项目的
Program.cs(或Startup.cs)中配置谷歌OAuth服务,明确指定CallbackPath为你预先配置的/authorize路径,同时将ClientId、ClientSecret写入项目配置文件 - 用户授权成功后,从认证上下文中拿到
access_token和refresh_token,再初始化DriveService即可
补充说明
你换回旧凭证仍然报错的大概率原因是:旧凭证原本是桌面类型,后续被修改为了Web类型,或者本地缓存的旧凭证已损坏,清理完缓存后如果把旧凭证改回桌面类型即可恢复正常。
内容的提问来源于stack exchange,提问作者DreamingOfSleep
相关产品推荐
相关产品推荐

