2009/02/11

mod_access_tokenを使ってみた

livedoor labsで公開されたmod_access_tokenを使ってみました。
mod_access_tokenはコンテンツに対して有効期限をつけたりすることができるApacheモジュールです。
ソースはGoogle CodeにてMITライセンスで公開されています。
http://code.google.com/p/modaccesstoken/

とりあえず使い道はないけれどもインストールしてみました。
まず、ソースをダウンロード&展開して例のごとくインストールをします。
今回はMacPortsでインストールしたAapcheを使いたかったのでconfigureオプションにprefixとapxsのパスを指定しました。

$ tar xzvf mod_access_token-0.10.tar.gz
$ cd mod_access_token
$ ./configure --prefix=/opt/local/apache2 --with-apxs=/opt/local/apache2/bin/apxs
$ make
$ sudo make install

これでインストールは完了です。

ソースファイルのeg以下にhttpd.confの設定例とURLを生成するためのサンプルコード(Perl)が同梱されています。
今回は例としてhttp://localhost/hoge/index.htmlに対して有効期限の設定をしてみたいと思います。

まず、httpd.conf(/opt/local/apache2/conf/httpd.conf)に下記を追記します。
<Location /hoge>
AccessTokenCheck On
AccessTokenSecret 15cfb576a8bdc1551219fdeb3117ed85
AccessTokenAccessKey 7864ffcb01fb5cde1f1c2f37b619fbcd
</Location>

AccessTokenSecretとAccessTokenAccessKeyはサンプルのままです。
運用する際は変更しましょう。

これでApacheを/opt/local/apache2/bin/apachectl restartで再起動すれば/hoge以下のコンテンツはmod_access_tokenの管理下になるので、普通にアクセスすると403(Forbidden)が返ります。

次にURLを生成します。
URLは以下のようなものです。
http://localhost/hoge/index.html?Signature=<Signature>&AccessKey=<AccessKey>&Expires=<Expires>

AccessKeyはhttpd.confに設定したAccessKeyです。
Expiresは有効期限のUNIXタイムスタンプです。ということは有効期限は秒単位で設定できるんですね。
Signatureは"HTTPメソッド + URIのパス + 有効期限 + AccessKey"とAccessTokenSecretをHMAC-SHA1の値をBase64エンコードしたものです。

AccessKeyhttpd.confに設定したAccessKey
Signature"HTTPメソッド + URIのパス + 有効期限 + AccessKey"とAccessTokenSecretをHMAC-SHA1の値をBase64エンコードしたもの
Expires有効期限のUNIXタイムスタンプ

ちなみにeg以下にあるsign.plでURLを生成できます。
下記ではhttp://localhost/hoge/index.htmlに120秒の期限付きで生成する例です。
$ ./sign.pl http://localhost/hoge/index.html 7864ffcb01fb5cde1f1c2f37b619fbcd 15cfb576a8bdc1551219fdeb3117ed85 120

生成したURLでアクセスしてみるときちんとコンテンツが表示されると思います。
120秒後にアクセスすると再び403になります。

想定される使い方はURLを生成するアプリを作成して、アクセスさせるんだと思います。
livedoorの何かのサービスで使われているらしいです。

せっかくなので、mod_access_tokenのソースを読みつつApacheモジュールの勉強もしてみようかと思います。

0 件のコメント: