OAuth2.0の採用で署名計算不要を実現
mixiを利用してサービスやアプリケーションを提供するための環境、「mixi Platform」の登場から3年。最初に1つのIDで複数のWebサービスを利用可能にする「OpenID」がリリースされ、PC版mixiアプリ開発環境、フィーチャーフォンを対象にしたモバイル版mixiアプリ環境のリリースが続いた。2010年9月にはスマートフォン向けの「mixiアプリ for Touch」(ブラウザ用)、mixiに蓄積されたソーシャルグラフや各種コンテンツを扱うことを可能にする「mixi Graph API」、イイネ!ボタンなどの機能を提供する「mixi Plugin」がリリースされている。そして、2011年5月から、Android用アプリケーションを作成するためのプラットフォーム「mixi API SDK for Android」の提供が開始された。
mixi Platformの中でもっとも使われているのは、mixi Graph APIだ。その中で田中洋一郎氏が技術的な特徴と挙げたのが、APIのアクセス認可にOAuth2.0プロトコルをいち早く採用したことだ。それまで使っていたOAuth1.0aでは署名をプログラムで組み込む必要があり、その難易度が高かったことから、田中氏の部署に問い合わせが殺到した。同様の現象が世界中で起こったために開発されたのが、署名の計算が必要ないOAuth2.0ということになる。ただ、その正式仕様が中々定まらず、導入事例も少なかったため、田中氏はその採用を「技術的なチャレンジだった」と振り返る。
APIへのアクセス認可を受ける手順を実演
ここで田中氏は、mixi Graph APIにおいてAPIを叩く手順を実演した。まず、誰でも無償で利用可能なサイト「mixi Developer Center」にアクセスし、作成するアプリケーションを登録したら、Consumer keyとConsumer Secretが発行される。Consumer keyはアプリケーションごとに振られるIDで、誰に見せても構わない。一方、Consumer Secretはミクシィと開発者の共有鍵であり、秘密にする必要がある。
クライアントプログラムからAPIにアクセスするには、OAuth2.0プロトコルにより規定された認可を得る必要がある。クライアントプログラムはWebブラウザで「https://mixi.jp/connect_authorize.pl」にアクセスし、このURLに続けてパラメーターを指定する。自分が誰であるかを示すために「client_id」というパラメーターの値として先ほどのConsumer keyを入れ、認可されたいAPI、情報などに関するパラメーターとその値を入れてアクセスする。
パラメーターが正しければ、Webブラウザ上に認可画面が現れ、そこにどのようなAPIアクセスを行い、どのような情報が参照または更新されるのかが提示される。その内容を確認して認可ボタンを押すと、サービス登録時に入力したRedirect URLにリダイレクトされ、APIにアクセスするために必要なAuthorization Codeを得ることができる。この部分、実際のアプリケーションでは、インストールしたユーザーが最初に起動すると画面上に「このアプリケーションは、あなたの個人情報を扱います。同意しますか?」と表示され、ユーザーが同意すると利用できるという仕組みに使われる。
実際にAPIにアクセスするためには、Authorization Codeを使ってアクセストークンを入手する必要がある。田中氏は、その作業をコマンドラインで実演してみせた。curlコマンドを使い、規定に従ってConsumer key、リダイレクトされるURLに加えてConsumer secret、Authorization Codeなどを指定してリターンキーを押したところ、エラー表示が出てしまった。実はAuthorization Codeの有効期限が3分であり、作業中に時間切れになってしまったのだ。そこで再取得し、コードを貼り替えた結果、無事にアクセストークンを取得することができた。続けて田中氏はcurlコマンドを使い、Authorizationリクエストヘッダでアクセストークンを指定。渡したいAPIのエンドポイントを指定し、登録されている情報を取り出して見せた。「一切プログラミングしないで、全部コマンドだけでAPIを叩きました。これがOAuth2.0の威力です」(田中氏)。
実際、mixi Graph APIのリリース後、問い合わせは激減しているという。デモではcurlコマンドで実践されたが、実際は各開発者が作成するプログラム内で処理を行うことになる。
Android用mixiアプリを効率的に開発するSDK
mixi Graph APIの実演に続けて田中氏は、2011年5月にリリースされたmixi API SDK for Androidの紹介とデモを行った。このSDKにより、カメラ機能や位置情報、タッチパネルなど、スマートフォン端末の搭載機能と連携した「mixiアプリ」を効率的に開発可能になった。SDKは誰でもmixi Developer Centerからダウンロードし、使うことができる。実は、セッション前半で田中氏がデモを行った、アクセストークンを取得するOAuth2.0の手続きは、すべてSDK側で行う仕組みとなっている。15分で切れるトークンの有効期限の自動延長もSDKにお任せだ。また、Androidのプログラムはリバースエンジニアリングが比較的容易なJavaで書かれていることから、ソースコードに秘密にする必要があるConsumer Secretを書かなくてもいいように設計されている。
デモは、既に簡単なAndroidアプリケーションが作成されている状態でスタート。作り込まれている機能は、1つあるボタンを押すと、アラートダイアログが出るというシンプルなものだ。まず、SDKを統合開発環境Eclipseにライブラリプロジェクトとしてインポートする。続いてデモ用アプリケーションを作成したプロジェクトに、インポートしたSDKのライブラリを登録する。SDKではMixiContainerと呼ばれるものを使うので、その定義を行う。SDKを利用するには、MixiContainerインスタンスの init(Activity activity)メソッドをコール。MixiContainerインスタンスを生成するためには、MixiContainerFactory.getContainer(Config config)を利用する。
さらにログイン処理と、API利用の認可処理を行うにはauthorizeメソッドを使う。認可ダイアログの結果を取得するために onActivityResultを使いauthorizeCallback()を呼び出す。
田中氏は、以上の手順を使い、機能拡張したAndroidアプリケーションでAPIを叩き、コマンドラインで取得したものと同じ情報を取り出して見せた。確かに難しい処理を書くことなく、基本的な機能を組み込むことが可能な仕様となっている。
最後に、田中氏はmixi API SDK for Androidはオープンソースで開発されていることから、「より便利に使うためのラッパーの開発や、まったく新しいSDKの出現を歓迎する」と呼びかけ、セッションを閉じた。
株式会社ミクシィ