ケータイWeb認証
ケータイ電話で、ユーザ認証使ったサイトを作ろうとすると、さまざまな問題が発生する。
その根源にあるのは、PC用のブラウザであれば一般的に持っている、Cookieという仕組みがケータイにないからです。auのケータイでは、サーバ側に24時間Cooki情報を保存してくれる仕組みがありそれが使える。しかし、DocomoやSoftbankのケータイにはその機能がない(一部の機種であったかもしれないが)。
そのためケータイ向けWebシステムでは、Sessionの引継ぎを、URLにマッピングして行ったり、ケータイ固有番号を用いた認証方法となる。
ケータイ固有番号については、Docomoの場合は、送信時に必ず確認ダイアログが出現し、Softbankの場合は、ケータイ端末の設定画面にて送信するかを決定する。auについては、確認なしで常に固有番号を、ユーザエージェント内に加えてサーバにアクセスしている。
いずれにしても、初期段階でのユーザ確認方法としては、ユーザ名・パスワードを用いる方法に比べると、ケータイにおいては簡単にログインできる。
認証した後、Sessionをどのように引き継ぐかというのが問題となる。毎回毎回固有番号を取得すると、Docomoのケータイでは、ダイアログがページ遷移ごとに出現してしまう。(モバゲーを使っているとよく出ると思う)
Session情報を、URLにマッピングする方法がある。.NETフレームワークや、Javaの世界ではこのような実装が比較的簡単に行うことができるようである。しかしその他のLL系で作られた(または作る)、システムでどのように実現するとという問題が発生する。Proxyを立てる方法などもそのひとつの方法である。
Zopeは、すべてのユーザ(ログインしているしていないにかかわらず)に、Session IDを与えている。そのSession IDをURLにマッピングする機能も実は含まれているのである。
http://www.ドメイン+/フォルダ → http://www.ドメイン+/'Session key'/''Session ID+/フォルダ となる。
session Keyはデフォルトで「_ZopeId」となり、Session IDは、20分間有効なASCII文字列である。当然ですが、このようなURLにするには、設定が必要になります。ただし、Zopeの標準で入っているプロダクトのみをしようする形になるので、非常に簡単にできる。
ヒントは、browser_id_managerという、Zopeのrootに存在するオブジェクトであった。
このSessionを使用し、ケータイおよびPC向けに、大学の休学情報などをお知らせする、システムを4月に納入し、順調に運営させていただいています。多少の難点としては、PCから見ても、URLにSession IDがURLに表示されてしまうことです。そのページをお気に入りに入れた場合は、次回以降再認証が必要となってします。
ケータイの認証が手軽に作れる、Zope/Ploneはやはりすばらしいということを再認識させてもいました。
Ploneでは、検索にすぐれた、CMS(コンテンツマネージメントシステム)の構築も容易で、検索結果にも定評がある。それらを組み合わせた相談などを最近よく受けています。
Ruby on RailsやEthna、CakePHP、Django、TurboGearsなどのLL系フレームワークが非常に盛んに使われているが、このような機能をもった、Zope/PloneはCMS(Blogを含む)として優れていると、さらに感じている今日この頃です。