错误400:invalid_scope"https://www.googleapis.com/auth/chat.bot"

sai*_*und 5 google-authentication oauth-2.0 google-oauth2 hangouts-chat

新谷歌聊天聊天的文档说你需要授权范围https://www.googleapis.com/auth/chat.bot做几乎任何事情.

这是错误:

在此输入图像描述

在使用OAuth2客户端生成身份验证URL时,我收到范围无效的消息.如果我使用https://www.googleapis.com/auth/chatgoogle plus等其他范围,我就没有这个问题.

当我尝试在API资源管理器中搜索内容时,URL或URL部分的组合也不起作用.

这是我获取URL的代码,似乎对其他一切工作正常:

var {google} = require('googleapis');
var OAuth2 = google.auth.OAuth2;

var oauth2Client = new OAuth2(
  "clientid-idididid.apps.googleusercontent.com",
  "_secretsuff",
  "http://localhost:3000/auth/google/callback"
);

var scopes = [
    "https://www.googleapis.com/auth/chat", //Works
    "https://www.googleapis.com/auth/chat.bot"  // Does not work
];

var url = oauth2Client.generateAuthUrl({
  access_type: 'offline',
  scope:  scopes,
});

console.log(url);
Run Code Online (Sandbox Code Playgroud)

sai*_*und 3

如果其他人遇到这个问题,我想我已经解决了。Google 似乎不需要域用户启用此身份验证范围,因为在测试机器人时它已经在域上获得了授权。这些范围的“授权”由域中从空间添加/删除机器人的用户决定。

如果您感到困惑,我会详细介绍一下。

云控制台镜像

当您在控制台中为组织https://console.cloud.google.com/apis/api/chat.googleapis.com/创建机器人时,您的机器人将添加到域中,并且可以由用户添加到空间中。如果然后转到凭据并创建一个服务帐户,您可以使用该 json 文件凭据作为您的机器人访问 API。下面的代码获取空间中人员的列表。

var { google } = require('googleapis');
var chat = google.chat("v1");

var key = require('./google_service-account-credentials.json');

var jwtClient = new google.auth.JWT(
  key.client_email,
  null,
  key.private_key,
  ['https://www.googleapis.com/auth/chat.bot'], // an array of auth scopes
  null
);

jwtClient.authorize(function (err, tokens) {
  chat.spaces.members.list({
    auth: jwtClient,
    parent: "spaces/AAAAD4xtKcE"
  }, function (err, resp) {
    console.log(resp.data);
  });
});
Run Code Online (Sandbox Code Playgroud)

如果您尝试获取其他空间(和其他域)上的成员列表,机器人将失败并显示完全相同的错误消息:

“Bot 不是该空间的成员。”

我假设,如果您在市场上列出您的机器人,并将其添加到不同的域和空间,谷歌的 API 将确保您的机器人可以在逐个空间的基础上执行其尝试执行的操作。在添加机器人来完成其工作后,必须设置一些身份验证流程会很烦人。这也可能是为什么当前的 REST API 不允许您在域下列出空格的原因,这不是此 API 工作的范例。