l0b*_*0b0 9 python security bash google-authentication
自从在Google上启用双因素身份验证(也称为两步验证)后,我的Google导出脚本就不再有效了.计算机已经过验证和信任,但不知何故,脚本不是.实际上,每次运行cron作业时,我都会收到一个新的"Google验证码"并且脚本失败.我认为用wget
或者一劳永逸地验证这些脚本应该是一件简单的事情curl
,但我找不到任何关于如何做的文档.
Google身份验证方案经历了多次迭代,我似乎无法再使用curl
或登录mechanicalsoup
.我尝试使用类似的URL https://accounts.google.com/ServiceLogin?continue=https://calendar.google.com/calendar/exporticalzip&Email=username@gmail.com&Passwd=application-specific-password
,并且我总是被重定向到登录页面,通常会显示消息"请使用您的帐户密码而不是应用程序专用密码".
您确定要在 shell 脚本中使用 2-factor auth 吗?如果是这样,您无需尝试将您的计算机或脚本设为“受信任”。每次运行脚本时,您只需执行完整的 2 因素身份验证。
如果目标是跳过手动第二因素身份验证,我建议改用特定于应用程序的密码(正如其他答案所建议的那样)。只是假装你不使用双因素身份验证,在所有和使用真实的登录名,但设定密码,以一个在产生https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en(子页面的HTTPS ://www.google.com/settings/security)。
目的是将特定于应用程序的密码“名称”设置为对您有意义的值。例如,我的密码标记为“工作中的 Pidgin”、“我的 Android 手机”、“工作中的 Thunderbird Google 地址簿扩展”等。您可以为“日历和阅读器导出脚本”设置一个。如果您认为此应用程序特定密码已被泄露(“泄露”),只需点击同一页面上的“撤销”链接,然后为您的脚本生成一个新密码。
对于代码,只需使用与 Google 单因素身份验证配合使用的最新版本。更新:因为原始问题使用 URLhttps://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 年之前已弃用,尽力而为的服务)。
如果您决定使用 OAuth,您可能需要查看http://blog.yjl.im/2010/05/bash-oauth.html和https://github.com/oxys-net/curl-oauth