1

我正在尝试为服务帐户获取 Google OAuth 2.0 访问令牌,但收到invalid_grant 错误消息。我已经检查了我的各种工件(私钥等)和时钟计时,但到目前为止还没有解决这个问题。

有一个可能相关的项目看起来很奇怪:谷歌的文档

HTTPs POST 中需要三个参数,如下所示

接下来是一个包含行的表,指定了两个参数(grant_typeassertion)。是否还需要第三个(我已经看到了也assertion_type以某种方式使用的示例)?会不会是(某些)Google 工程师(或者真的是你的工程师)数不过三?:)

总结:合适的参数是什么?从谷歌当前的文档中似乎还不清楚。

更新:这里有一些进一步的信息:我不能使用谷歌 API 客户端库,因为我的应用程序需要的语言不是谷歌目前不支持的语言。因此,我必须实现创建和签署 JWT 等的逻辑,这通常是不鼓励的。我已经确认我的服务帐户工件是有序的:我可以将它们与用于 Java 的 Google API 客户端库一起使用来访问同一个日历(从我的目标平台之外的另一个平台,即)。特别是,我的“client_id”的形式是“...@developer.gserviceaccount.com”,我的密钥是 128 位 RSA 私钥,两者都是从Google APIs Dashboard获得的。

4

1 回答 1

1

我现在已经能够确认它是两个参数,而不是三个。Google 的文档似乎是正确的,因为它将这两个参数 (grant_typeassertion) 命名为正确,但在将它们称为三个参数时是错误的。

两个参数的证据来自当前的Internet 草案JSON Web Token (JWT) Bearer Token Profiles for OAuth 2.0 ),它定义了RFC 6749OAuth 2.0 授权框架)下的扩展授权类型。

证据还包括在我的(非 Java)实现中尝试了由 Google API 客户端库获得的逐字访问令牌(并通过日志记录显示):使用此访问令牌已使invalid_grant错误消失。

(现在在我的代码中显然存在关于形成 SHA256withRSA 签名的问题,但这是另一个问题......)

于 2013-04-18T08:32:39.050 回答