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 :
説明 : 受け付ける署名方式です。 hmac-sha1, rsa-sha1 のどちらか、もしくは両方(スペース区切り)を指定します。
AuthOpenSocialConsumerKey :
説明 : OpenSocial サービスから提供される Consumer Key です。 AuthOpenSocialAcceptSignatureMethods ディレクティブに hmac-sha1 を指定した場合に必須となります。
AuthOpenSocialConsumerSecret :
説明 : OpenSocial サービスから提供される Consumer Secret です。AuthOpenSocialAcceptSignatureMethods ディレクティブに hmac-sha1 を指定した場合に必須となります。
AuthOpenSocialRSAPublicKeyFile :
説明 : OpenSocial サービスから提供される RSA PublicKey を保存したファイルへのパスを指定します。 AuthOpenSocialAcceptSignatureMethods ディレクティブに rsa-sha1 を指定した場合に必須となります。
上の設定例では用いていませんが、以下のディレクティブもオプションで指定可能です。
AuthOpenSocialRequiredKey :
説明 : 必須HTTPパラメータ (query string 又は post data) の key を指定します。リクエストのパラメータにこの値が存在しなければ、HTTPエラーをリクエスト送信者へ返します。
AuthOpenSocialRequiredKeyAndValue :
説明 : 必須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の購読をお願いいたします。