OAuth2授权码在Auth Playground生成令牌时遇redirect_url_mismatch错误
我来帮你拆解这个redirect_url_mismatch问题的核心——授权码和生成它时指定的redirect URI是强绑定的,你在Gmail插件里配置的redirect URI和OAuth Playground默认的肯定不一样,这就是报错的根源。下面是一步步的解决思路:
1. 先确认Gmail插件的专属Redirect URI
因为你用的是apps-script-oauth2库,你的Apps Script代码里肯定有类似这样的OAuth配置块:
var service = OAuth2.createService('GmailAddon') .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth') .setTokenUrl('https://accounts.google.com/o/oauth2/token') .setClientId('YOUR_CLIENT_ID') .setClientSecret('YOUR_CLIENT_SECRET') .setRedirectUri('REDIRECT_URI_FROM_ADDON');
这里的REDIRECT_URI_FROM_ADDON就是关键,通常格式是https://script.google.com/macros/d/YOUR_SCRIPT_ID/usercallback(具体取决于你的脚本部署方式)。把这个URI准确复制下来,别漏了任何字符。
2. 让OAuth Playground匹配插件的Redirect URI
OAuth Playground默认的redirect URI是https://developers.google.com/oauthplayground,和插件的不匹配,所以要修改设置:
- 打开OAuth Playground,点击右上角的齿轮图标(Settings)。
- 勾选「Use your own OAuth credentials」。
- 填入你Gmail插件对应的Client ID和Client Secret。
- 在「Redirect URI」字段,粘贴你刚才从Apps Script里拿到的插件专用redirect URI。
- 保存设置。
3. 重新获取适配的授权码(旧授权码已经失效)
你之前拿到的授权码是基于插件原来的redirect URI生成的,和Playground新设置的URI不匹配,所以必须重新走授权流程:
- 在Playground左侧「Step 1」,选择和Gmail插件完全一致的权限Scopes(比如
https://www.googleapis.com/auth/gmail.readonly,不能多也不能少)。 - 点击「Authorize APIs」,用目标用户账号登录并完成授权。
- 授权完成后,页面会跳转到你设置的插件redirect URI,Playground会自动抓取到新的授权码(你也可以从地址栏的
code参数里手动提取)。 - 切换到「Step 2」,点击「Exchange authorization code for tokens」,就能拿到有效的访问令牌和刷新令牌了。
4. 适配Java应用的Redirect URI配置
如果你最终要在Java应用里用这套授权流程,注意两个关键点:
- 要么让Java应用的redirect URI和插件/Playground用的完全一致,并且把这个URI添加到Google Cloud Console对应OAuth客户端的「Authorized redirect URIs」列表里。
- 要么在Cloud Console里为Java应用单独创建OAuth客户端,把它的redirect URI加入授权列表,然后用新的Client ID/Secret重新走授权流程生成适配的授权码。
重要提醒
- 授权码是一次性的,而且和Client ID、redirect URI强绑定,三个要素有一个不匹配就会触发
redirect_url_mismatch。 - 所有用到的redirect URI都必须在Google Cloud Console的OAuth客户端设置里提前授权,否则哪怕你代码里写对了也会报错。
内容的提问来源于stack exchange,提问作者Curious Explorer
相关产品推荐
相关产品推荐

