如何使用python通过oauth登录到第三方应用程序

Posted

技术标签:

【中文标题】如何使用python通过oauth登录到第三方应用程序【英文标题】:How to login by oauth to third party app with python 【发布时间】:2022-01-04 18:09:48 【问题描述】:

我在针对具有 google 提供的 Oauth 的网络服务进行身份验证时遇到问题。 基本上,我想用我的谷歌帐户登录到一个网页,对它进行一些抓取。

由于 web 服务不是我的,我没有应用程序 secret_key,只有客户端 ID、redirect_URL 和范围,我可以从登录时看到使用的请求方法的参数中恢复。

一旦通过身份验证,网页只需要一个名为 SID(我猜是会话 ID)的 cookie,以作为经过身份验证的用户回复。没有 Bearer 令牌,只有 SID cookie。

是否可以自动执行此类身份验证?我已经阅读了许多相关主题,但它们都需要我没有的 secret_key,因为我不是应用程序的所有者。

【问题讨论】:

【参考方案1】:

(由于代表无法发表评论)

是的,您的要求是可能的。理论上,您可以遵循并匹配所有请求以成功验证自己以获取 SID 并执行抓取,尽管这对于一些基本的网络抓取来说是一项非常困难的任务,这就像编写一个成熟的科学计算器来执行 5 + 5 . 你问的是一个真正困难的任务,当你尝试使用 Python 登录你的帐户时,你会遇到各种安全问题,并被要求进行电话/身份验证器应用程序/电子邮件验证请求,然后您需要跟踪这些安全 cookie 并保持更新,这真是一团糟,对任何人来说都非常困难。

我认为更好的方法是手动验证自己并获取SID cookie 并将其硬编码到cookie HTTP 标头中的刮板中。

我知道这会引起人们对 SID cookie 过期时该怎么做的担忧。既然你还没有说网站,我很难想象有一个网站可以让你经常向 Google 验证自己,而不是拥有自己的内部 SID/JWT 刷新系统来让你保持登录。

我的建议是:

检查 SID cookie 的过期时间,如果可以在验证自己后手动复制并粘贴它,请执行此操作。 如果 SID 即将到期,请检查是否有 API 请求为自己获取新 SID(无需再次通过 OAuth),在您的网络面板中查找设置新 SID 的 set-cookie 响应标头,您可能需要在程序中更改和跟踪这些内容,但这比编写程序登录 Google 容易得多。 如果无法刷新 SID 并且它们经常过期,并且您需要进行长期的网络抓取并坐在那里每 30 分钟手动获取一个新 cookie 是不够的,我建议您考虑这样做Puppeteer/Chromium,因为它比通过 Python HTTP 请求更容易。

【讨论】:

感谢您的回答。您的建议的问题是我打算使用不同的帐户自动执行此任务,因此手动登录并捕获 cookie 是不行的。 我明白了。祝你任务顺利!

以上是关于如何使用python通过oauth登录到第三方应用程序的主要内容,如果未能解决你的问题,请参考以下文章

手把手带你实现第三方应用登录

OAuth2 授权

OAuth 第三方登录授权码(authorization code)方式的小例子

OAUTH 2.0深入了解:以微信开放平台统一登录为例

基于oauth2.0实现应用的第三方登录

OAuth2.0认证和授权机制讲解