错误400:无效请求
您不能登录此应用程序,因为它不符合Google OAuth 2.0政策,以保持应用程序的安全性。
您可以告诉应用程序开发人员,此应用程序不符合一个或多个Google验证规则。
请求详细信息:
本节内容由应用程序开发人员提供。此内容尚未经过Google审核或验证。
如果您是应用程序开发人员,请确保这些请求详细信息符合Google政策。
redirect_uri: urn:ietf:wg:oauth:2.0:oob
我如何解决这个错误?需要注意的是:
- 该项目的OAuth同意屏幕被标记为“内部”。因此,任何提到Google对该项目的审查或发布状态的内容都是无关紧要的。
- 我已经启用了域名下的“信任内部应用程序”选项。
- 在同一项目中,另一个客户端ID可以正常工作,并且两个客户端ID之间没有明显区别——它们都是“桌面”类型,只给我提供了不同的客户端ID和客户端密钥。
- 这是一个命令行脚本,因此我使用“复制/粘贴”验证方法在此处记录,因此使用
urn:ietf:wg:oauth:2.0:oob
重定向URI(复制/粘贴是在没有浏览器的无头机器上运行此脚本的唯一友好方式)。 - 我能够在开发域中复现相同的问题。我有三个客户端ID。最旧的一个来自2021年1月,另一个来自2021年12月,而我今天创建的一个则来自2022年3月。其中,仅2021年12月的那个可以正常工作,并且在接受或拒绝“Error 403:org_internal”之前让我选择要进行身份验证的帐户(这是预期的)。其他两个则会给我一个“Error 400:invalid_request”,甚至不让我选择“internal”帐户。以下是我的应用程序生成的URL(我使用ruby google客户端API),它们之间唯一的区别是客户端ID——2021年1月, 2021年12月, 2022年3月。
这是关于授权流程的代码部分,不同客户端ID的URL是在$stderr.puts url
行上生成的。它与此处的官方示例文档 (截至本文撰写时的版本)基本相同。
OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'
def user_credentials_for(scope, user_id = 'default')
token_store = Google::Auth::Stores::FileTokenStore.new(:file => token_store_path)
authorizer = Google::Auth::UserAuthorizer.new(client_id, scope, token_store)
credentials = authorizer.get_credentials(user_id)
if credentials.nil?
url = authorizer.get_authorization_url(base_url: OOB_URI)
$stderr.puts ""
$stderr.puts "-----------------------------------------------"
$stderr.puts "Requesting authorization for '#{user_id}'"
$stderr.puts "Open the following URL in your browser and authorize the application."
$stderr.puts url
code = $stdin.readline.chomp
$stderr.puts "-----------------------------------------------"
credentials = authorizer.get_and_store_credentials_from_code(
user_id: user_id, code: code, base_url: OOB_URI)
end
credentials
end
org_internal
错误(这意味着它运行良好)。是的,我现在正在查看客户端ID,它们全部都是“桌面”。为了进一步确认:2021年1月的客户端ID是566372898811-b89vfj17vaqpcd7bat5tdvbdcpbb41li.apps.googleusercontent.com
,它是桌面版,并显示无效请求错误;2021年12月的客户端ID是566372898811-htvr8md883tk25e1t8q7kabacpmh94dc.apps.googleusercontent.com
,它是桌面版并且有效。 - chutz