モジュールの名前と仕様を決めよう
去年の7月に「作りたい」と言ったきりだったApacheモジュールを作るための元気がようやく貯まったので仕様を考えてみる。
おさらいすると、モジュールの目的はApacheのドキュメントルート以下にある特定ファイルについて、閲覧制限を行う(又は行わない)事で、認証自体は別のWebアプリケーションが行う事を想定。
つまり、あるファイルを閲覧できるかどうかの判定はLLで組まれたWebアプリケーションなどで行い、モジュールはその情報を元に制限するかどうかの判断のみを行うのだ。
まず情報をどのように渡すかだけど、これはほぼCookieしかないだろうという事でCookieに決定。ドメインの制約はあるけれど、用途から言って問題にはならないだろうと思う。
情報の内容については、ランダムなセッションIDだと安全性は高いけど、どこかに保存されているIDを探すために通信が発生してしまうのでDB方式に対するメリットが見えにくい。それなら高速なDB(MySQLのMEMORYエンジンとか)と既存のモジュールを組み合わせればなんとかなるわけだし。
もっと簡単な方式にしようとすると*1、「認証済み」という情報にその情報が真正である事を証明する何かをくっつければ良い。というわけでHMACを使う事に決定。
簡単な仕様としては
- 認証アプリケーションとモジュールはHMACのキーを事前に共有しておく
- 認証アプリケーションは有効期限とそのHMACをCookieに格納
- モジュールはCookieの値が有効期限内ならHMACを比較して制限をしたりする
といったところに。
この方式だと、認証情報を第三者に漏らす抑止力が働かないのが難点か。
名前は、機能そのままで「mod_auth_hmac」にしてSourceForge.jpにプロジェクトを作ってみた。mod_limit_hmacでは?というのは言ったらダメだ。
*1:なんか書いてて誰かに怒られそうな気がしてきた