mod_auth_opensocial をリリースしました

mod_auth_opensocial 0.1.0 をリリースしました。

mod_auth_opensocial は、OpenSocial アプリからサーバに届いた署名付きリクエストの検証(Verification)を行うための Apache 2.0, 2.2 用のモジュールです。

署名付きリクエストとは、OpenSocial の makeRequest 関数 (AUTHORIZATIONパラメータにSIGNEDを指定) により生成され、コンテナにより署名されたリクエストです。

mod_auth_opensocial が署名の検証に成功すると、リクエストは通常通り(HTMLの取得や、PHP、Servlet Containerへのアクセスなど)に処理されます。 検証に失敗すると、HTTPエラーをリクエストの送信者へ返します。
バックエンドが受け取るリクエストは全て署名の検証に成功したものなので、バックエンドはリクエストを再度検証する必要が無くなります。
リクエストに署名が付加されているかどうかすらバックエンドは気にする必要がありません。

尚、本プロジェクトは Google Code で管理しています。
http://code.google.com/p/mod-auth-opensocial/

■ インストール

mod_auth_opensocial は openssl の機能を使用していますので、Apache に mod_ssl が組み込まれている必要があります。

Apache のインストール

※ configure コマンドへのオプションの –prefix と –enable-mods-shared の値は適宜変更してください。
またシステムによっては、 –with-ssl オプションで openssl へのパスを指定する必要があるかもしれません。 (例: –with-ssl=/usr/local/openssl )

#./configure 
--prefix=/usr/local/apache \ --enable-mods-shared=most \ --enable-so \ --with-included-apr \ --enable-ssl # make # make install

mod_auth_opensocial のインストール

# tar xvzf mod_auth_opensocial-0.1.0tar.gz
# cd mod-auth-opensocial-0.1.0
# vi Makefile APACHE_BASE=PATH_TO_APACHE の行の PATH_TO_APACHE を Apache を↑でインストールしたディレクトリに変更してください。 APACHE_BASE=/usr/local/apache # make # make install

httpd.conf の変更

httpd.conf 内の LoadModule ディレクティブ が記述されている箇所に↓の行を追加してください。

LoadModule auth_opensocial_module modules/mod_auth_opensocial.so

Apache をリスタートすると mod_auth_opensocial がロードされます。
ただし、この段階では設定を行っていないので、まだ何も起こりません。

■ mod_auth_opensocial の設定

Apache が http://www.example.com という URL で稼働しているとします。
http://www.example.com/secure/ の以下全てのディレクトリ(パス) へのアクセスを検証するには、以下のように設定します。

<Location "/secure/">
   AuthType OpenSocial
   Require valid-user

   AuthOpenSocialEnabled On

   AuthOpenSocialAcceptSignatureMethods hmac-sha1 rsa-sha1

   AuthOpenSocialConsumerKey 4345983491233
   AuthOpenSocialConsumerSecret wa/nx35kdmerLwQZp8AfmoX

   AuthOpenSocialRSAPublicKeyFile ./conf/pub.1199819524.-1556113204990931254.cer
</Location>

※ consumer secret の値を記述しているので、httpd.conf のパーミッションには注意を払ってください。

AuthType Require ディレクティブは、必ず必要なので忘れずに記述してください。

それでは mod_auth_opensocial 個別のディレクティブを見ていきましょう。

AuthOpenSocialEnabled :

引数の数 : 1
説明 : このモジュールの有効、無効を指定します。 指定の方法は、有効の場合には On を、無効にする場合には Off を指定します。

AuthOpenSocialAcceptSignatureMethods :

引数の数 : 1
説明 : 受け付ける署名方式です。 hmac-sha1, rsa-sha1 のどちらか、もしくは両方(スペース区切り)を指定します。

AuthOpenSocialConsumerKey :

引数の数 : 1
説明 : OpenSocial サービスから提供される Consumer Key です。 AuthOpenSocialAcceptSignatureMethods ディレクティブに hmac-sha1 を指定した場合に必須となります。

AuthOpenSocialConsumerSecret :

引数の数 : 1
説明 : OpenSocial サービスから提供される Consumer Secret です。AuthOpenSocialAcceptSignatureMethods ディレクティブに hmac-sha1 を指定した場合に必須となります。

AuthOpenSocialRSAPublicKeyFile :

引数の数 : 1
説明 : OpenSocial サービスから提供される RSA PublicKey を保存したファイルへのパスを指定します。 AuthOpenSocialAcceptSignatureMethods ディレクティブに rsa-sha1 を指定した場合に必須となります。

上の設定例では用いていませんが、以下のディレクティブもオプションで指定可能です。

AuthOpenSocialRequiredKey :

引数の数 : 1
説明 : 必須HTTPパラメータ (query string 又は post data) の key を指定します。リクエストのパラメータにこの値が存在しなければ、HTTPエラーをリクエスト送信者へ返します。

AuthOpenSocialRequiredKeyAndValue :

引数の数 :2
説明 : 必須HTTPパラメータ (query string 又は post data) の key と値のペアをスペース区切りで指定します。リクエストのパラメータに、このディレクティブで指定したkeyと値のペアが含まれていなければ、HTTPエラーをリクエスト送信者へ返します。

今回リリースした mod_auth_opensocial の バージョン 0.1 では、ある一つの URL に対して1つの consumer key や rsa publickey しか設定できないため、複数のOpenSocial サービスからの署名リクエストを1つのLocationディレクティブでさばくことができません。

例えば、http://www.example/myapp/ に対して mixi アプリとOrkut の両方からの署名リクエストの検証は行えないということです。 Locationタグには、1つだけOpenSocial サービスの設定を行ってください。
この制限や、他にも課題が多数ありますが、今後のバージョンで対応していきます。

このモジュールの使いどころやOpenSocialについて、このブログに順次アップしていきます。
この機会に是非 RSSの購読をお願いいたします。