【Googleアナリティクスapiなどを使ってデータを取得する際に表示されるエラー「Error=BadAuthentication Info=InvalidSecondFactor」の対処方法】

Googleアナリティクスのapiを使ってデータをいろいろ取得しているのですが、その途中で少しつまずいたことがありましたので、メモ書きました。

2段階認証プロセスを有効にしていると、データが取得できない場面に遭遇

Googleアナリティクスapiは、GoogleアカウントのIDとパスワードを使ってapiリクエストをする方法があります。

それで、私はGoogleアカウントは「2段階認証プロセス」を有効にしています。「2段階認証プロセス」は、アカウントへの不正ログインなどを防止するためにも効果的な方法としてお勧めされているので設定しているのですが、この「2段階認証プロセス」を有効にした状態でapiリクエストをするとエラーになりました。

Fatal error: Uncaught exception 'Exception' with message 'GAPI: Failed to authenticate user. Error: "Error=BadAuthentication Info=InvalidSecondFactor "' in なんとかかんとか

どういうことなんだろ・・・・と思って調べると、以下に情報がありました。

(https://developers.google.com/+/api/?hl=ja より引用)

2 段階認証プロセスを使用する際に欠落したアプリケーション固有のパスワードを検出する

Google アカウントの安全性をさらに高めるため、高度な選択可能の 2 段階認証プロセスが許可されています。 2 段階認証プロセスのユーザーが通常のアカウント パスワードを使ってログインしようとすると、ClientLogin API により、代わりにアプリケーション固有のパスワードを使用する必要があることを示すエラーが返されます。 その場合、レスポンスには、不正確な認証情報ではなく 2 段階認証プロセス コードがないためにエラーが発生したことを示す、追加フィールドが含まれます。

Error=BadAuthentication
Info=InvalidSecondFactor

上に書いてあることを単純に表現すると、「2段階認証プロセス」の設定がされているアカウントに対してログインするには、2段階認証プロセスコードが必要ってことですね。これは、apiを使ってデータを取得する際などにも必要になることが今回わかりました。なるほど、だからエラーになったのか~。

というわけで、続けて以下を読み進めますと・・・

アプリケーション固有のパスワード
ブラウザの外部で動作するアプリケーションの中には、2 段階認証プロセスにまだ対応しておらず、確認コードを入力する機能がないものもあります。たとえば、次のようなアプリケーションです:

  • AdWords Editor
  • 旧式の Android スマートフォン
  • Chrome Sync
  • Microsoft Outlook などのメール クライアント
  • Google トークや AIM などのチャット クライアント

これらのアプリケーションを使用するには、初めにアプリケーション固有のパスワードを生成する必要があります。この生成されたパスワードを、通常のパスワードの代わりにアプリケーションのパスワード フィールドに入力します。固有のパスワードを必要とするアプリケーションごとに、新しいアプリケーション固有パスワードを作成できます。 詳細

なるほどです・・・。2段階認証プロセスに対応していないアプリケーションも存在している、と。また、そのアプリケーションを使用するには「アプリケーション固有のパスワード」を生成して、普段使っているGoogleアカウントのログインパスワードと置き換えればいいんですね。

というわけで前提となる理解ができましたので、早速「アプリケーション固有のパスワード」を生成しましょう~。

アプリケーション固有のパスワードを生成する方法

Googleアカウントにログインをした状態で、Google アカウント設定ページにアクセスします。下の画像のように「セキュリティ」というリンクがありますので、クリックします。

2015/05/28追記:アカウント設定のページのURLは「https://myaccount.google.com/」に変更されたみたいですね。一応、当時の設定についても載せています。

画面が切り替わりますので、下のように「2段階認証プロセス」の項目を見つけます。そこで、「アプリケーション固有のパスワードの管理」をクリックします。

すると、以下のようにパスワードの入力を求められます。(Googleアカウントにログインしていてもこの画面が表示されます)ここで、Googleアカウントにログインしているパスワードを入力します。

ログインに成功すると、

  • Google アカウント に許可されたアクセス
  • 接続済みのサイト、アプリケーション、サービス

として、一覧が表示されると思います。そしてページを最後までスクロールすると、下のようにアプリケーション固有のパスワードを生成するための入力欄があります。ここに、今回はGoogleアナリティクスapiを使ってデータを取得したいので、例として「gapi report」と入力し、「パスワードを生成」をクリックします。

すると、以下のようにパスワードが表示されます(グレーに塗られている個所にパスワードが表示されてます)このパスワードが「アプリケーション固有のパスワード」です。

それでは、このパスワードをどう使えばいいのか、例を書きました。

「アプリケーション固有のパスワード」の入力例

例えば、「gapi-google-analytics-php-interface」を使う際には、以下のように値を定義する箇所があると思います。

define('ga_email','gmailアドレス');
define('ga_password','ここに今回生成したパスワードを入れる');

といったように、Googleアカウントのログインパスワードではなくて、今回生成した「アプリケーション固有のパスワード」を入力します。

これでOKです。何かのお役にたてますと幸いです~。

著者:bouya Imamura