【问题标题】:Unexpectedly got ACCESS_TOKEN_SCOPE_INSUFFICIENT response when making a request using the Google Chat API使用 Google Chat API 发出请求时意外收到 ACCESS_TOKEN_SCOPE_INSUFFICIENT 响应
【发布时间】:2022-02-03 16:54:11
【问题描述】:

我正在使用 Google Chat API 开发一个简单的“机器人”,但无法在聊天组中发送消息。

在 Google Cloud Console 中,我创建了一个项目,启用了 Google Chat API,生成了 OAuth 凭据,并在 OAuth 同意屏幕中添加了这个范围:
.../auth/聊天

通过手动输入:
https://www.googleapis.com/auth/chat

编辑:
最初我尝试进入文档建议范围:
https://www.googleapis.com/auth/chat.bot
但它没有被接受,我从云控制台界面得到一个无效范围的错误。还要仔细检查一下,当我尝试将其放入请求中时,我在浏览器中遇到了同样的错误,所以我只是通过反复试验得出了工作范围。

然后我从凭据部分下载了凭据:
client_secret_XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com.json

在本地,我在 google python 模块周围使用 Google.py python 包装器,位于此处:
https://learndataanalysis.org/google-py-file-source-code/

我在此文件中稍作更改以使用控制台身份验证而不是浏览器:
flow.run_local_server() -> flow.run_console()

我的代码如下所示:

from Google import Create_Service

CLIENT_SECRET_FILE = 'client_secret_XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com.json'
API_NAME = 'chat'
API_VERSION = 'v1'
SCOPES = ['https://www.googleapis.com/auth/chat']

service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)

text = 'My message'

space = 'spaces/XXXXXXXXXX'

chat_metadata = {
    'text': text,
}

service.spaces().messages().create(parent=space, body=chat_metadata).execute()

Create_Service 调用引导我通过控制台授权,例如:

Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=...
Enter the authorization code:

访问该链接后,我收到一个令牌,我在控制台中输入该令牌并收到此 Python 错误:

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/XXXXXXX/messages?alt=json returned "Request had insufficient authentication scopes.". Details: "[{'@type': 'type.googleapis.com/google.rpc.ErrorInfo', 'reason': 'ACCESS_TOKEN_SCOPE_INSUFFICIENT', 'domain': 'googleapis.com', 'metadata': {'service': 'chat.googleapis.com', 'method': 'google.chat.v1.ChatService.CreateMessage'}}]">

显然,我为请求提供了聊天范围,而且,正如我所提到的,我确保将其添加到 OAuth 同意屏幕中。我找不到任何其他聊天范围。 是否还有其他我遗漏的步骤,或者是否有任何其他范围,我应该使用它来创建消息?

顺便说一句,因为我注意到在 Google Cloud Console 中这个范围的描述是“查看和管理聊天对话和用户状态”并且没有明确提到“创建”,所以我尝试了其他调用,例如:service.spaces()。 get() 或 service.spaces().members().list()。但是我仍然遇到同样的错误。

我还应该提到,同样的方法适用于 Google Drive API,用于创建文件、文件夹、创建权限等。

感谢您对此提供的任何帮助。

【问题讨论】:

    标签: python google-api google-oauth google-api-python-client hangouts-chat


    【解决方案1】:

    始终检查文档以了解它会告诉您所需权限范围的方法。

    在这种情况下,Method: spaces.messages.create 需要以下范围。

    这不是你使用的那个。

    【讨论】:

    • 这是一个合乎逻辑的观点,但我忘了提到这也不起作用。我首先检查并开始尝试组合。我将编辑我的问题。无论如何,谢谢。
    • 如果您更改范围,请确保重置您的应用,以便再次请求用户同意,您需要查看新的同意表单并验证其请求的范围是否正确。
    猜你喜欢
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    相关资源
    最近更新 更多