如何设置Google OAuth 2.0重定向URI?解决端口频繁变动问题
解决Google Calendar API认证redirect_uri_mismatch(动态端口问题)
方案一:锁定OAuth重定向请求的固定端口
你的测试启动地址是https://localhost:7000,但重定向URI用了随机端口,大概率是你使用的OAuth客户端库默认自动选择了随机端口。得在代码里显式指定固定的重定向URI:
- 配置OAuth客户端时,把
RedirectUri设为固定值,比如http://127.0.0.1:7000/authorize/flowName=GeneralOAuthFlow(路径部分和错误提示里的保持一致,只把端口换成你固定的7000) - 同步到Google Cloud控制台的项目OAuth同意屏幕→已授权的重定向URI列表,添加这个固定URI
如果用的是.NET的Google.Apis.Auth库,示例代码大概是这样:
var credential = GoogleWebAuthorizationBroker.AuthorizeAsync( new ClientSecrets { ClientId = "你的ClientId", ClientSecret = "你的ClientSecret" }, new[] { CalendarService.Scope.CalendarReadonly }, "user", CancellationToken.None, new FileDataStore("Calendar.Api.Auth.Store"), new LocalServerCodeReceiver("127.0.0.1", 7000, "/authorize/flowName=GeneralOAuthFlow") ).Result;
这里通过LocalServerCodeReceiver直接指定了固定端口和路径,替代默认的随机端口逻辑。
方案二:使用Google Cloud控制台支持的通配符(仅限特定场景)
Google OAuth目前支持有限的通配符规则:
- 本地测试场景下,允许添加
http://localhost/*或http://127.0.0.1/*作为重定向URI(*仅匹配路径,端口不能用通配符) - 要是你的重定向路径里固定有
flowName=GeneralOAuthFlow,也可以尝试添加http://127.0.0.1/*/authorize/flowName=GeneralOAuthFlow这种格式(不过这个方案兼容性不如方案一,优先选方案一)
为啥LaunchSettings.json的端口不生效?
你之前加LaunchSettings里的端口没用,是因为LaunchSettings管的是你的Web应用启动端口,而OAuth重定向的端口是认证库自带的本地服务器逻辑决定的,两者不是一回事。必须在认证库的配置里指定固定端口,才能和Google控制台的URI匹配上。
内容的提问来源于stack exchange,提问作者cococococococo
相关产品推荐
相关产品推荐

