11

Googleで2要素認証(別名2段階認証)を有効にしたため、Googleのエクスポートスクリプトが機能しなくなりました。コンピューターは検証され、信頼されていますが、どういうわけかスクリプトはそうではありません。実際、cronジョブを実行するたびに、新しい「Google検証コード」を受け取り、スクリプトが失敗します。wgetこのようなスクリプトをorで認証するのは簡単なことだとcurl思いますが、その方法についてのドキュメントは見つかりませんでした。


curlGoogle認証スキームは何度も繰り返されており、またはを使用してログインできなくなったようですmechanicalsoup。のようなURLを使用しようとしましたがhttps://accounts.google.com/ServiceLogin?continue=https://calendar.google.com/calendar/exporticalzip&Email=username@gmail.com&Passwd=application-specific-password、常にログインページにリダイレクトされ、通常は「アプリケーション固有のパスワードではなく、アカウントのパスワードを使用してください」というメッセージが表示されます。

4

4 に答える 4

6

シェルスクリプトで2要素認証を使用することを絶対に確信していますか?もしそうなら、あなたはあなたのコンピュータやスクリプトを「信頼できる」ものとして取得しようとする必要はありません。スクリプトを実行するたびに、完全な2要素認証を実行するだけです。

ターゲットが手動の第2要素の認証をスキップすることである場合は、代わりにアプリケーション固有のパスワードを使用することをお勧めします(他の回答ですでに提案されているように)。2要素認証をまったく使用していないふりをして、実際のログイン名を使用しますが、パスワードはhttps://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en(httpsのサブページ)で生成されたものに設定します。 ://www.google.com/settings/security)。

目的は、アプリケーション固有のパスワード「Name」を自分にとって意味のある値に設定することです。たとえば、「Pidgin at work」、「My Android Phone」、「Thunderbird Google Address Book Extension atWork」などのラベルの付いたパスワードがあります。「CalendarandReaderExportScript」のパスワードを使用できます。このアプリケーション固有のパスワードが危険にさらされている(「漏洩している」)と思われる場合は、同じページの[取り消し]リンクをクリックして、スクリプトの新しいパスワードを生成してください。

コードには、Googleの単一要素認証で機能した最後のバージョンを使用してください。更新:元の質問はセッションログインを開始するためにURLを使用していたため、https://accounts.google.com/ServiceLogin実際にはブラウザログインを偽造しています。ただし、Googleはこれを公式にサポートしておらず、私がこれを書いているときに、通常のログインにアプリケーション固有のパスワードを使用すると、「アプリケーション固有のパスワードの代わりにアカウントのパスワードを使用してください」というエラーメッセージが表示されるようです。

Googleの2要素認証と「信頼できるコンピューター」について理解しておくべきことの1つは、実際の実装では、有効期限が30日の永続的なCookieがブラウザーに追加されるだけであるということです。信頼できるコンピューターは、IPアドレスが信頼されている、またはその他の魔法の接続が作成されていることを意味するものではありません。スクリプトが選択したブラウザから「信頼できるコンピュータ」のCookieをキャプチャしない限り、コンピュータを信頼できるものとしてマークしたことがあるかどうかはまったく問題ではありません。(Googleフォームには、「このコンピューターを30日間記憶する」ではなく、「このブラウザーとユーザーアカウントの組み合わせを30日間信頼する(永続的なCookieを保存する)」と記載する必要があります。ただし、これは技術的すぎると考えられていました...)

更新:(以下の私のコメントからコピー)公式にサポートされている唯一の方法(サーバー間アプリケーション)は、https://developers.google.com/accounts/docs/OAuth2ServiceAccountに記載されています。リクエストをエンコードし、 https://code.google.com/apis/consoleで作成されたサービスアカウントの秘密鍵を使用するOAuth/JWTが必要です。別の方法として、ClientLogin認証を使用することもできます(2015年までは、すでに非推奨のベストエフォートサービスです)。

OAuthを使用する場合は、http://blog.yjl.im/2010/05/bash-oauth.htmlおよびhttps://github.com/oxys-net/curl-oauthを参照してください。

于 2012-07-09T05:57:00.597 に答える
2

Pythonスクリプトが電子メールの送信を停止したため、アプリケーション固有のパスワードを生成し、スクリプトユーティリティのGmailアカウント(例:myscriptutility@gmail.com)をそのパスワードに変更してから、次の方法でそのパスワード(例:'applicationpassw')を正常に使用しました。 Pythonスクリプトフラグメント(申し訳ありませんが、完全な例はありません)。

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)

したがって、少なくともWindows10のpython3.6.5では、アカウントとアプリケーションで16文字のアプリケーション固有のパスワードを使用するように変更するだけでよいようです。

于 2019-01-29T21:29:35.093 に答える
0

アプリケーション固有のパスワードを生成します。ユーザードキュメント開発者向けドキュメント

于 2012-04-23T14:14:32.747 に答える
0

私のスクリプトでは、アプリケーション固有のパスワードを作成できます。パスワードを作成してから、Googleアカウントのパスワードを入力するスクリプトで、代わりにアプリケーション固有のパスワードを入力するだけです。

アプリケーション固有のパスワードの詳細については、こちらを参照してください。

アプリケーション固有のパスワード

お役に立てれば !!

于 2012-04-27T11:04:28.177 に答える