2015-06-08

OAuth認証による Excel VBA Google Analytics APIアクセス ②

前回記事






必要なExcel VBAライブラリの作成



今回はメイン処理をコーディングする前に必要なライブラリを作成していきます。



作成するものは次のとおりです。


  • IEオブジェクトのWAIT関数(ビジーチェック)
  • スリープ関数(DoEvents付き)
  • IEオブジェクトの終了
  • IEオブジェクトの取得
  • OAuth認証コード取得
  • OAuthアクセストークン取得


足りなかったら随時追加していきます。なお、アクセストークン取得用のHTTPレスポンスはjson形式で返却されます。パースには今のところvba-jsonを利用していますが、どうもこのライブラリは階層の深い複雑なパース処理は非常に非効率なところが多々あるので、APIレスポンスのjsonはパース処理をせずに直接読み込みをすることとしています。


OAuth認証について

ここで少しOAuth認証についてまとめておきます。
OAuth認証そのものの仕組みは「OAuth認証とは」等でググっていただくとして、重要なのは今までGoogle API等のサービスを利用するにあたり、プログラムからGoogleアカウント情報を使って直接ログインしてアクセストークンを取得していました。

これは、プログラム内にユーザID・パスワードといった秘密情報を持たせることとなってしまうので万一そのソースコードを第3者が入手してしまった場合、不正アクセスといったセキュリティ攻撃を受けてしまうリスクが高かったと言えます。

OAuthでそのリスクがなくなるわけではありませんが、不正アクセスされる可能性は軽減されると考えてよいでしょう。プログラム上に記載するものは前回設定したクライアントIDやクライアントシークレットといった認証を行うための情報だけで、実際の認証行為自体はプログラムを動かしたときに都度実施され、プログラムは認証が成功したときに時間制限付き(通常1時間)の一時アクセストークンのみを受け取り、APIアクセス時に利用するといった形となります。

OAuthはAPIの使い勝手を悪くする?


いいことづくめな気がしますが、いざライブラリを作ってみて、OAuthの理解が進んでくると諸手を挙げて賛成できないケースも出てきます。

OAuthは認証フロー自体をプログラムに実装しないのでユーザがブラウザ上でGoogleアカウントにログインしたり画面に出てきた承認ボタンを押下する行為をしなければなりません。
それだと、時刻がきたら自動起動するようなバッチアプリケーションに向きません。

それがいやなので、
気づいた方は気づかれたと思いますが、前回作成した「AuthorizationCode取得」関数ですが、ブラウザ画面に表示された内容によって自動で必要項目が自動で入力され、認証画面でも自動でボタンクリックして閉じるようになっています。

これは、本来OAuthを実装するのであればあまり推奨はされません。
ましてはサービスログイン画面でアカウント名とパスワードを自動入力してログインさせることにも対応させてますが、これをやっては本末転倒です。

自動化も可能ですってことを確認するために参考として記載したロジックですので流用される場合はよく考えてのご使用をお勧めします。

正しくはOAuthのクライアントIDをサービスアカウントとして新規作成し、そのときに払い出される証明書を実行するサーバに配置することでこれを解決します。
が、これが非常に面倒なのです。。。このネタは次回に取って置くこととしますw

いずれにしても、セキュリティを強化することと、プログラムの実装容易性は比例するといってよさそうです。

次回記事