ASP.NET Core 3.1启用Google认证时重定向URI不匹配问题求解
解决ASP.NET Core 3.1 Google认证重定向URI不匹配问题
我来帮你理清楚这个问题——你遇到的核心矛盾是Google认证回调的URI和你在控制台配置的不匹配,而且这里有两个容易搞混的重定向环节,咱们一步步解决:
问题根源
错误提示里的https://localhost:44345/signin-google是ASP.NET Core Google认证中间件的默认回调地址,也就是Google认证成功后直接回调到你应用的地址。但你在Google控制台里配置的是/Account/GoogleResponse,这是你自己定义的Action路径,两者不匹配就导致了错误。
这里要区分两个重定向:
- Google直接回调到你应用的地址:必须在Google控制台配置
- 应用内部跳转的地址:由ASP.NET Core中间件处理,无需在Google控制台配置
方案一:使用默认回调路径(推荐,更省心)
这个方案不需要改代码,只需要更新Google控制台的配置:
- 打开Google开发者控制台,找到你的OAuth客户端ID配置页
- 在「授权重定向URI」列表中,添加
https://localhost:44345/signin-google - 保存更改(注意:Google的配置更新可能需要1-2分钟生效,别着急立刻测试)
- 你的现有代码完全不用修改:
AddGoogle默认的回调路径就是/signin-google,和控制台配置匹配- 你写的
GoogleLogin和GoogleResponse逻辑是正确的:Google回调到/signin-google后,中间件会自动处理认证票据,再跳转到你的GoogleResponseAction完成后续登录流程
方案二:自定义回调路径(如果你想保留控制台的/Account/GoogleResponse)
如果希望保持控制台的URI配置,需要修改代码让中间件适配:
- 保持Google控制台的「授权重定向URI」为
https://localhost:44345/Account/GoogleResponse - 修改
AddGoogle的配置,指定回调路径:services.AddAuthentication() .AddGoogle(opts => { opts.ClientId = "xxx.apps.googleusercontent.com"; opts.ClientSecret = "yyy"; opts.CallbackPath = "/Account/GoogleResponse"; // 和控制台URI完全匹配 }); - (可选)简化
GoogleLogin方法:
现在回调路径直接指向你的GoogleResponseAction,代码可以更简洁:
中间件会在处理完Google回调后,自动跳转到[AllowAnonymous] public IActionResult GoogleLogin(string returnUrl) { var properties = signInManager.ConfigureExternalAuthenticationProperties("Google", returnUrl); return new ChallengeResult("Google", properties); }returnUrl指定的地址,你的GoogleResponse只需要专注处理外部登录逻辑即可。
注意事项
- 确保URI的大小写、协议(https/http)、端口号完全一致,差一个字符都会报错
- 如果是开发环境用HTTP测试,要把控制台的URI改成
http://localhost:xxxx/xxx,但生产环境必须用HTTPS - Google配置生效有延迟,修改后别立刻测试,等几分钟再试
内容的提问来源于stack exchange,提问作者x19
相关产品推荐
相关产品推荐

