如何使用Google Oauth2.0通过Telegram Bot对用户进行身份验证

问题描述 投票:0回答:2

这是我第一次与 Google API 交互,我正在使用 python3.9 和这个库Python Telegram Bot 我想通过电报机器人访问用户 Google API 日历,但我似乎找不到任何文章来指导我完成该操作。我的关键问题(我认为)是将成功授权流程重定向回电报机器人。

这就是我的想法:

  1. 在电报应用程序中,用户发送“/send”给机器人
  2. 机器人接收消息并向谷歌返回授权链接给用户
  3. 用户点击授权链接并允许访问
  4. 机器人接收授权访问并完成 Oauth 流程

问题出在步骤3和步骤4之间。标准的授权链接是

https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=<clientid>&redirect_uri=<redirect_uri>&scope=<scope>&state<state>&access_type=offline

如何将授权链接发送回我的电报机器人?我应该创建另一个 API 端点来接收该授权链接吗?或者我可以在 中发送 telegram api send_message() 将成功消息重定向到我的机器人。

更新1

感谢 CallMeStag,我设法找到一种方法来完成 oauth 过程。对于遇到同样问题的人,这就是我所做的 先决条件:在 google console api - Web 应用程序中创建凭据。 redirect_uri 设置为 localhost:8000 (开发阶段)

  1. 用户发送“/send”给机器人
  2. 机器人接收消息并返回授权链接
    https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=<clientid>&redirect_uri=
    http://localhost:8000/
    &scope=<scope>&state<state>&access_type=offline
  3. 用户单击链接进行身份验证,它将重定向到
    http://localhost:8000
    。使用 fastapi 作为 webhook 来接收消息。捕获授权码,使用
    google.oauthlib.flow
    完成授权过程。接下来,将用户重定向回电报链接
    https://t.me/<botname>
  4. 开始使用用户谷歌日历
google-api google-oauth google-calendar-api google-api-python-client python-telegram-bot
2个回答
1
投票

目前 PTB 应用程序监听外部更新(本 cas 中的身份验证)确实不是很直接 - 另请参阅此问题。目前,您可能最容易设置一个与

Updater
并行运行的自定义 Webhook 应用程序 - 例如使用flask/django/starlette/fastapi/...。或者,如果您无论如何都在为您的机器人使用 Webhooks,您可以修补
Updater
来为您完成这项工作。尽管这需要一些手动工作 - 请参阅此处查看示例。

一旦您能够监听来自 Google 的更新,就可以通过 PTB 的常用处理程序设置来处理它们,特别是通过

TypeHandler
甚至自定义
Handler
子类 - 请参阅此 FAQ 条目

关于重定向网址:您需要将用户重定向回您的机器人,因此您必须提供一个链接来执行此操作。

Bot.link
应该可以解决问题。


免责声明:我目前是

python-telegram-bot
的维护者。


0
投票

google 设备授权流程集成

  1. 用户使用电报用户 ID 开始与机器人聊天
  2. 从google端点获取设备代码和授权端点
  3. 将设备代码和网址发送给用户
  4. 同时,继续轮询谷歌以获取访问令牌
  5. 用户通过浏览器授权机器人
  6. 机器人收到令牌
  7. 访问谷歌API
© www.soinside.com 2019 - 2024. All rights reserved.