如何在脚本中使用Google applicationspecific密码?

2024-09-21 03:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

自启用2因素身份验证(aka。两步验证)在Google上,我的Google export scripts不再工作。计算机是经过验证和信任的,但脚本却不可信。实际上,每次运行cron作业时,我都会收到一个新的“Google验证代码”,并且脚本失败。我认为用wgetcurl一次性验证这些脚本应该是一件简单的事情,但是我找不到任何关于如何进行验证的文档。


Google认证方案已经经历了多次迭代,我似乎再也无法使用curlmechanicalsoup登录。我试过使用像https://accounts.google.com/ServiceLogin?continue=https://calendar.google.com/calendar/exporticalzip&Email=username@gmail.com&Passwd=application-specific-password这样的url,我总是被重定向到登录页面,通常会显示消息“请使用您的帐户密码,而不是应用程序特定的密码”


Tags: https脚本com身份验证密码计算机googlescripts
3条回答

我的python脚本停止发送电子邮件,因此我生成了特定于应用程序的密码,将脚本实用程序gmail帐户(例如My script utility@gmail.com)更改为该密码,然后通过下面的python脚本片段(抱歉,没有完整的示例)成功地使用了该密码(例如“applicationpassw”)。

email = SMTPHandler(mailhost=('smtp.gmail.com',587),
    fromaddr='anyaddress@mail.homeserver',
    toaddrs=['whoiwanttomailto@gmail.com'],
    subject= webSite + ' not working',
    credentials=('myscriptutility@gmail.com','applicationpassw'),
    secure=())
logger.addHandler(email)

因此,至少在Windows 10上使用python 3.6.5时,我们需要做的就是在帐户和应用程序中使用十六个字符的应用程序特定密码。

您确定要对shell脚本使用2-factor auth吗?如果是的话,你就不需要试着让你的电脑或脚本成为“可信的”。每次运行脚本时,只需执行完整的2-factor auth。

如果目标是跳过手动第二因子验证,我建议改用特定于应用程序的密码(正如其他答案已经建议的那样)。假设您根本没有使用2-factor auth,并使用您的真实登录名,但将密码设置为在https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en(第https://www.google.com/settings/security子页)生成的密码。

其目的是将特定于应用程序的密码“Name”设置为对您有意义的值。例如,我有标记为“Pidgin at work”、“My Android Phone”、“Thunderbird Google地址簿扩展at work”等的密码。您可以有一个用于“日历和阅读器导出脚本”的密码。如果您认为这个特定于应用程序的密码被泄露了,只需点击同一页上的“撤销”链接,然后为脚本生成一个新密码。

对于代码,只需使用与Google single factor auth一起工作的最后一个版本。更新:因为原始问题使用URL https://accounts.google.com/ServiceLogin来启动会话登录,这实际上是伪造浏览器登录。然而,Google并没有正式支持这一点,在我写这篇文章的时候,使用特定于应用程序的密码进行正常登录似乎会出现错误消息“请使用您的帐户密码,而不是特定于应用程序的密码”。

关于Google 2-factor auth和“可信计算机”,有一点需要理解,实际的实现只是在浏览器中添加了一个具有30天到期时间的永久cookie。受信任的计算机并不意味着你的IP地址是受信任的,或者其他神奇的连接是被创建的。除非您的脚本从您选择的浏览器中捕获“受信任的计算机”cookie,否则您是否将计算机标记为受信任的根本不重要。(Google表单不应该说“记住这台计算机30天”,而应该说“信任这台浏览器和用户帐户组合30天(保存永久cookie)”。不过,我想这被认为太技术化了……)

更新:(从下面的注释复制)唯一官方支持的方法(服务器到服务器的应用程序)记录在https://developers.google.com/accounts/docs/OAuth2ServiceAccount。它要求OAuth/JWT对请求进行编码,并使用在https://code.google.com/apis/console创建的服务帐户私钥。作为替代方案,您可以使用ClientLogin身份验证(在2015年之前已经被弃用,best effort service)。

如果您决定使用OAuth,您可能需要查看http://blog.yjl.im/2010/05/bash-oauth.htmlhttps://github.com/oxys-net/curl-oauth

相关问题 更多 >

    热门问题