我正在尝试使用此文档:
Google Sign-In for server-side apps,为我们的服务器端应用程序实现Google登录。我已成功完成步骤1-6,并成功获取了一次性授权码。但是,在第7步中,当我请求交换一次性授权码以获取访问令牌时,我收到以下响应:
{
"error": "invalid_grant",
"error_description": "Bad Request"
}
我尝试使用CURL手动发送HTTP POST请求和官方的Python API客户端库。响应总是相同的"invalid_grant
"。
在请求一次性授权码时,我确保请求离线访问模式。
我验证了为谁获取一次性授权码的用户确实已授予权限,方法是前往https://myaccount.google.com/u/0/permissions,并确保我们的应用程序在“具有帐户访问权限的第三方应用程序”中列出,并具有正确的访问范围。
请问如何调试此问题?不幸的是错误信息没有提供有用的提示,并且我已经尝试过在Stack Overflow或其他地方找到关于此特定错误的所有内容。
更新:我找出了问题所在。显然,一次性代码仅适用于一次请求,无论请求是否成功。因此,我试图获取刷新令牌,因为我的第一次尝试格式错误,请求失败,而第一次失败使一次性代码无效。任何随后的请求,即使正确形成一个,使用相同的代码也会失败并显示"invalid_grant"。这是一种令人意外的行为,我认为“一次性”意味着一次成功的尝试。 希望这对那些将在此基础上工作的其他人有所帮助。 我希望OAuth请求返回更多信息以帮助调试。