【问题标题】:Google Sheet Update Api : Getting error [Request is missing required authentication credential]Google Sheet Update Api:出现错误 [请求缺少所需的身份验证凭据]
【发布时间】:2018-02-09 00:07:02
【问题描述】:

我在 Postman 中使用以下参数调用 Google 表格更新请求:

Url:https://sheets.googleapis.com/v4/spreadsheets/SpreadSheetId/values/SheetName!A1:D5 请求类型:PUT
标头:授权 - MyAccessToken
请求正文:

得到响应:

注意:为了更新到电子表格,我按照以下步骤操作:

  1. 使用此link 在 Google Api 控制台上创建一个应用程序,然后转到凭据部分。单击创建凭据,然后单击 OAuth 客户端 ID,将应用程序类型创建为 Web 应用程序。现在离开限制部分。然后创建。现在应用程序已创建。

  2. OAuth 同意屏幕 选项卡中添加一些项目名称

  3. 现在,使用此 link 授权 API。在右上角,打开设置图标。选择 Use your own OAuth Credentials 为 true。从 Google Api 控制台上的项目中添加客户端 ID 和客户端密码。在下拉列表中选择 Google Sheet Api v4 下的 Scope 为 https://www.googleapis.com/auth/spreadsheets,然后授权 API。

如果获取 redirect_mismatch_uri。然后将重定向 URI 复制到 oathPlayground 或提示参数之前,并将其粘贴到 Google Api 控制台中项目的限制部分下的授权重定向 URI 中。然后会生成Access Token,

  1. 获取访问令牌。在我之前定义的请求中复制此访问令牌。

但出现错误。我无法弄清楚问题所在。 在此先感谢..

【问题讨论】:

  • 当我看到你的问题时,我很担心Sheet API v4 的情况。您能否再次确认 API console 是否已启用 Sheet API v4?如果启用了 Sheet API v4,您可以在仪表板中看到它。我不知道这是否会成为您的解决方案。对不起。
  • 是的,工作表 API 4 已启用。实际上,我可以使用 API 密钥从电子表格中读取数据。但是,我认为无法使用 OAuth 令牌将数据写入电子表格,因为 OAuth 令牌是强制写入的。
  • 感谢您的确认。作为另一个确认,访问令牌的信息如何?您可以使用curl 'https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=### access token ###' 检索它。响应包括范围和到期时间。如果access token没问题,就要考虑request方法了。
  • 不,我无法检索此访问令牌信息。我收到错误,即“需要 access_token、id_token 或 token_handle”。我认为,生成访问令牌时存在问题。你能帮忙吗?
  • 感谢您报告结果。在您的情况下,您的访问令牌可能已过期。所以我有一个下一个问题。你有刷新令牌吗?

标签: api oauth google-sheets google-sheets-api


【解决方案1】:

由于您已经有一个刷新令牌,您可以使用刷新令牌检索访问令牌。作为示例,它显示了如何使用 curl 的刷新令牌检索访问令牌的方法。 refresh token 检索到的 access token 有过期时间。请确认。

您可以在此处查看详细信息。 https://developers.google.com/identity/protocols/OAuth2WebServer

卷曲命令:

curl -L \
  --data "refresh_token=### refresh token ###" \
  --data "client_id=### client id ###" \
  --data "client_secret=### client secret ###" \
  --data "grant_type=refresh_token" \
  https://www.googleapis.com/oauth2/v4/token

结果:

{
 "access_token": "### access token ###",
 "token_type": "Bearer",
 "expires_in": 3600
}

以下 curl 命令用于检索访问令牌的信息。如果访问令牌的过期时间已过,则响应为{"error_description": "Invalid Value"}。如果不是,您可以看到以下响应。

获取访问令牌信息:

curl -L \
 --data "access_token=### access token ###" \
https://www.googleapis.com/oauth2/v2/tokeninfo

结果:

{
 "issued_to": "#####",
 "audience": "#####",
 "scope": "#####",
 "expires_in": 1234,
 "access_type": "offline"
}

编辑1

此示例代码用于将sheet1!A1:C2 的范围更新为[["test1","test2","test3"],["test4","test5","test6"]]

示例代码:

curl -L -X PUT \
-H "Authorization: Bearer ### access token ###" \
-H "Content-Type: application/json" \
-d '{"values":[["test1","test2","test3"],["test4","test5","test6"]]}' \
"https://sheets.googleapis.com/v4/spreadsheets/### spreadsheet ID ###/values/sheet1%21a1%3ac2?valueInputOption=USER_ENTERED"

结果:

{
  "spreadsheetId": "### spreadsheet ID ###",
  "updatedRange": "sheet1!A1:C2",
  "updatedRows": 2,
  "updatedColumns": 3,
  "updatedCells": 6
}

【讨论】:

  • 谢谢...我可以使用您的 curl 请求获取访问令牌。但我收到错误:更新 google 电子表格 api 时,“请求缺少所需的身份验证凭据”。因为,我在授权标头中传递了这个访问令牌。
  • @Juhi Matta 只有https://www.googleapis.com/auth/spreadsheets 包含在范围内吗?如果是这样,请将https://www.googleapis.com/auth/drive 添加到范围。在您的 cmets 中,您已经启用了 Sheet API。至此,我认为使用 Sheet API 的准备工作已经完成。请确认。
  • 是的,在 OAuth-Playground 上生成访问令牌时,我已将 googleapis.com/auth/spreadsheets 包含在范围内。但是,更新电子表格 api 不起作用。它显示未经身份验证的错误。而且我已经在授权标头中添加了生成的访问令牌。
  • 是的,我也已经尝试过使用相同的范围。但仍然遇到同样的错误
  • @Juhi Matta 我刚刚更新了我的答案。请证实。如果您有正确的访问令牌,则示例 curl 代码可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 2014-05-08
  • 1970-01-01
  • 2015-06-01
  • 2020-10-14
  • 2019-06-07
  • 1970-01-01
相关资源
最近更新 更多