はじめに

最近のWebサービスでは新しい認証方式「OAuth」が必要なものが増えています。今回からTwitterをターゲットとしてOAuth認証を利用する方法を説明します。動作確認は、Windows 7、Excel 2010、VBA 7.0およびWindows XP、Excel 2007、VBA 6.5で行っています。

図1.完成サンプル

Excel VBAでWebサービス - 天気予報を取得してみよう
Excel VBAでWebサービス - MSNマネーから株価の推移を取得しよう
Excel VBAでWebサービス - Excelで書籍情報を検索・取得してみよう
Excel VBAでWebサービス - YouTube APIで動画を検索しよう

OAuth認証について

OAuth認証とは大雑把に言うと、「トークン」と呼ばれる通行手形のようなものと、「シークレット」と呼ばれる秘密鍵による電子署名とを組み合わせて、安全にWebサービスにアクセスする方式です。従来、ユーザーがWebサービスを利用する際には、IDとパスワードを入力する必要がありました(図2)。

図2.通常のWebサービス利用

アプリケーション(以下、アプリと略記)から、ユーザーの代わりにWebサービスにアクセスし、ユーザーの情報を利用する場合、何らかの認証が必要です。しかし、IDとパスワードそのものをアプリに渡してしまうのはセキュリティ上問題です。具体的には、ユーザーの許可なしに目的の範囲を超えたアクセスが行われる恐れがあります。そこで考えられたのがOAuthという認証方式です。

図3.OAuth用語とアプリの登録

OAuthでは、アプリのことを「コンシューマー」、Webサービスのことを「サービス・プロバイダー」と呼びます(図3)。アプリはWebサービスを利用するにあたって、登録を行い、「コンシューマー・キー」というIDと、「コンシューマー・シークレット」という秘密鍵を発行してもらう必要があります。

OAuth認証の流れ

Webサービスから発行してもらったコンシューマー・キーとコンシューマー・シークレットを用い、次の3つのステップを経て、Webサービスを利用するためのアクセス・トークンを取得します(図4)。

  1. リクエスト・トークンを要求して取得する
  2. 取得したリクエスト・トークンをユーザーに認証してもらう
  3. アクセス・トークンを要求して取得する

図4.OAuth認証の流れ

(1)リクエスト・トークンを要求して取得する(OAuth認証によるHTTP通信)

まず、Webサービスにリクエスト・トークンを要求します。問題がなければリクエスト・トークンとリクエスト・シークレット(リクエスト・トークン要求時に必要な秘密鍵)が発行されます。

(2)取得したリクエスト・トークンをユーザーに認証してもらう(ブラウザ経由)

次に、取得したリクエスト・トークンを使ってブラウザを起動し、ユーザーにアプリを認証してもらうページを表示させます(図5)。

図5.ユーザーにアプリを認証してもらうページ

ユーザーが「認証する」ボタンをクリックすれば、「PINコード」が表示されます(図6)ので、これを受け取ります。

図6.PINコード表示ページ

(3)アクセス・トークンを要求して取得する(OAuth認証によるHTTP通信)

ユーザーから受け取ったPINコードを使って、Webサービスにアクセス・トークンを要求します。問題がなければアクセス・トークンとアクセス・シークレット(アクセス・トークン要求時に必要な秘密鍵)が発行されます。

以降は、取得したアクセス・トークンとアクセス・シークレットを用いて、HTTP通信により、Webサービスにアクセスできるようになります。