ブラウザの自動化:GmailAPIを使用してMFAコードを取得する

別の記事で、LogicMonitorを使用して合成トランザクションを実行し、Webサイトサービスが正しく稼働していることを確認するという概念を紹介しました。 Webサイトを完全に監視する前に、Webサイトでの認証が必要になる場合があります。また、認証には、電子メールで配信されたMFAコードの提示が必要になる場合があります。 これをさらに一歩進めて、MFA(多要素認証)チャレンジを組み込みましょう。 このチャレンジは、MFAコードを登録済みの電子メールアドレス(Gmail)に送信するように要求し、MFAコードを取得し、コードをWebサイトに提示してMFAチャレンジを完了することで構成されます。  

GmailAPIを設定します

Gmailにはこのプロセスをかなり簡単にする堅牢なAPIがあるため、Gmailを公開の確認済みメールアドレスとして使用します。 MFAサービスチェックはGmailアカウントにアクセスして、Webページから要求されたMFAコードを取得します。

まず、APIを有効にして、Gmailで認証する必要があります。 これは彼らに従うことによって行うことができます クイックスタートガイド.

ステップ 1:GmailAPIを有効にする

「GmailAPIを有効にする」フォームボタンをクリックして、credentials.jsonファイルを生成します。 このファイルをPythonスクリプトと同じディレクトリに配置します。

ステップ 2:Googleクライアントライブラリをインストールします

以下を実行します pipコマンド Python環境で。

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

ステップ 3:サンプルスクリプトをセットアップして実行します

サンプルスクリプトはGmailアカウントに対して認証されます。 他のPythonファイルと同じようにスクリプトを実行します。 ポップアップウィンドウでGoogleへの認証を求めるメッセージが表示され、認証されると、token.jsonファイルが生成されます。 このファイルを、Pythonスクリプトとcredentials.jsonファイルを含む同じディレクトリにコピーします。

 

Pythonスクリプト

これらのインポートをPythonスクリプトに追加して、GmailAPIにアクセスします。

from __future__ import print_function from googleapiclient.discovery import build from httplib2 import Http from oauth2client import file、client、tools

 

このコードをPythonスクリプトに追加して、Gmailアカウントへの認証を有効にします。

#Gmail用の信条を取得

store = file.Storage( 'token.json')

creds = store.get()

 

そうでなければ 信用 or creds.invalid:

flow = client.flow_from_clientsecrets( 'credentials.json'、SCOPES)

creds = tools.run_flow(flow、store)

service = build( 'gmail'、 'v1'、http = creds.authorize(Http()))

 

MFAコードを読み取るために、XNUMXつのGmail機能を使用します。

最初の関数はListMessagesMatchingQueryです

def ListMessagesMatchingQuery(service、user_id、query =”):

「」」クエリに一致するユーザーのメールボックスのすべてのメッセージを一覧表示します。

引数:

  service:承認されたGmailAPIサービスインスタンス。

  user_id:ユーザーのメールアドレス。 特別な価値「私」

  認証されたユーザーを示すために使用できます。

  query:返されたメッセージをフィルタリングするために使用される文字列。

  例 - 特定の送信者からのメッセージの場合は「from:user@some_domain.com」。

戻り値:

  クエリの条件に一致するメッセージのリスト。 注意してください

  返されるリストにはメッセージIDが含まれています。getを使用する必要があります。

  メッセージの詳細を取得するための適切なID。

「」


この関数は、クエリに一致するメッセージのリストを返します。 この場合、クエリを使用して特定の送信者からMFAコードを取得しています([メール保護]).  

messLst = ListMessagesMatchingQuery(service、 'me'、 'from:DoNotReply@ MFACodesRus.com')

次はGetMessageです


def GetMessage
(service、user_id、msg_id):

「」「指定されたIDでメッセージを取得します。

引数:

  service:承認されたGmailAPIサービスインスタンス。

  user_id:ユーザーのメールアドレス。 特別な価値「私」

  認証されたユーザーを示すために使用できます。

  msg_id:必要なメッセージのID。

 

戻り値:

  メッセージ。

「」

ListMessageMatchingQuery関数は、受信した順序でメッセージのリストを返します。 最新のメッセージのインデックスは0になります。次のコードで最新のメッセージを取得できます。

body = GetMessage(service、 'me'、messLst [0] ['id'])

次に、正規表現を使用してMFAコードを抽出する必要があります。 適切な正規表現は、MFAメールの内容によって異なる場合があります。 この例では、メッセージは次のように表示されます。


認証のためにワンタイムパスコードをリクエストしました。 ワンタイムパスコードは519643です。

このコードを使用すると、次にコードを提供するように求められたときに、新しいコードを要求する必要があります。 この電子メールを誤って受信していると思われる場合、またはコードを電子メールアドレスに送信するように要求しなかった場合は、Logicmonitor Credit Union((888)415-6442)に連絡してください。

このメールには返信しないでください。


私はこれを単純に保ち、数字コードを探すために「\ d +」を使用しました。  

Browcode = re.findall( '\ d +'、body ['snippet'])

MFAコードは変数に格納され、Pythonスクリプトで必要な場所で使用できるようになりました。  

この記事では、合成トランザクションの使用を拡張して、MFAチャレンジの実行を含めました。 この機能により、監視するWebサイトに必要な多要素認証プロセスを完全に自動化できます。   

ブラウザ自動化の実装 あなたのビジネスは困難で面倒なものである必要はありません。 LogicMonitor プロフェッショナル サービス チームには才能があり、挑戦する準備ができています! 無料の LogicMonitor プロフェッショナル サービスのスコーピング コールについて質問するか、 無料トライアル。