Home - BBS - Mail - Diary - About CrossLamina.com

全ケータイキャリア対応、認証の必要なサイト構築のヒント

あるグループウェアのケータイ版製作の過程で集めた情報を公開します。
アクセスが多いのに内容が貧弱で心苦しい限りです。今後、少しづつですが内容を充実させていきます。
ここでは、金をかけずにケータイサイトを作成する環境を整える。perl、cgi、Basic認証のみを使って全キャリア対応のまあまあの認証の仕組みを作る。ということがテーマです。人様からお金をいただくようなケータイサイトの構築は念頭に置いていません。金をかけるなり、キャリアの公式サイトと認められるなりすれば、ほかの方法もあると思います。参考程度 & 自己責任でご利用ください。(AirH"PHONE に関しては最後の方にまとめてあります)

ブラウザエミュレーター
各キャリア対応のフリーのブラウザエミュレーターを紹介します(Javaのエミュじゃないからね)。この情報を集めるのは結構苦労しました。いろいろなエミュレーターを試した結果、厳選したものです。
環境変数"HTTP_USER_AGENT" も各キャリアに応じたものを吐いてくれてとっても便利です。
i-mode 用、iモードHTMLシミュレータ(Win)
DoCoMo が配っています。HTTPヘッダーが見れたり、HTMLの文法チェックをしてくれたり、iモードHTMLのバージョンを選択できたりと、必要十分な機能をそなえています。
J-sky 用、919シミュレータ(Winのみ)
クイックサーチという会社がフリーで配ってくれてるエミュレーターです。 エディタもついてます。私は使わないけど。
ezweb 用、Openwave SDK Universal Edition(Winのみ)
Openwave Systems 社提供の WAP2.0 対応コンテンツ開発のための統合開発環境。ezweb に関してはこれ以上のものはなし!他のキャリアでも WAP2.0 対応が進めばこれさえあればすべてOK!となってくれる、と信じてるんですが。どうなるでしょうか。
全キャリア対応の認証をどうやって作るか?
私が手がけましたグループウェアのアクセスの中心はパソコンからなので新しいユーザーの登録やパスワードの変更はパソコンからのみできるようにしました。また、パソコンからアクセス時の認証はBasic認証で済ませました。ケータイとパソコン両方ともユーザー名、パスワードは共通にします。
Basic認証が使えれば一番楽なんだけど
ターゲットとする端末の範囲によっては使えます。
はじめに断っておきますが、Basic認証に関して、i-mode以外では公式な情報が見当たりません(私の探し方が悪いだけ?)。以下の情報は、私の経験とネット上をさまよってかき集めた断片的な情報を総合したものです。くれぐれも参考程度でお願いします
i-mode ではF501i,N501i,D501i以外のi-mode対応端末で使えます。(左の3機種はページが切り替わるたびに認証を要求されるらしい、こんな仕様にするぐらいなら搭載しない方が良かったと思うのは私だけ?)。FOMA では P2101V でしか使えないようです。(これで次世代ケータイと言えるのか?)
ezweb ではWAP2.0 対応端末(A5000/C5000/A3000/C3000/A1100シリーズ、要するに数字部分が1100以上の機種)では確実に使えます。それ以外でも、たぶん使えます。
J-sky ではJ-P51,J-K51,J-SH51,J-SH52などの数字部分が51より大きい機種では使えるようです。
Basic認証を使うにしても、認証に失敗した時のエラーページにケータイ用の物を用意しないとユーザーに不快な思いをさせると思います(Authorization Required とかっていきなり言われてもあせる人がいっぱいいると思う)。独自のエラーページを設定できる環境ならばBasic認証も選択肢になると思います。
Basic認証を使わないなら
自分で認証の機構を作るしかありません。
やり方は全ページのa 、form 要素のURLの末尾にIDをつけて、それを使って認証します(たとえば "index.cgi?k87i469" みたいに)。
ただこの方法だとIDが外部に漏れやすいので、ID としてユーザー名やパスワードを使うことはしないで、ログイン時にランダムに生成した文字数字列をIDとして使います(このIDの有効時間も定めておくと良いと思います)。
セキュリティーを考えるとIDを GET で渡すのではなく POST のほうがよりよいですが、J-sky のステーション非対応端末ではPOSTが使えません。
ステーション非対応端末をターゲットとしないならば(実際そんなに数はないはず) POST を使って hidden タイプでIDを持ちまわすのがベストかな?
cookie も使ってみたい所ですが、ezweb でしか使えないのでダメです。
とにかく、ターゲットの端末をどうするかによって、作りかたは変わってきます。
各キャリアの認証の仕組みを作るヒント
Basic認証以外でキャリアごとに使えそうな認証の仕組みを考えます。
i-mode だったら
503i以降のi-mode対応端末、FOMAでは a タグ、form タグに utn 属性を付ける事で、"HTTP_USER_AGENT"に端末の製造番号が付加されます。これでユーザーを識別することが出来ます。ただし、IDが送信されるのはユーザーが送信を許可した場合に限ります。しかも、IDが送信される場面すべてで、ユーザーには確認画面が出るので、この方法は、かなり煩わしいことになりますね。ページ数の多いサイトで使うには実用的でないかも。
J-sky だったら
パケット対応機に限り"HTTP_USER_AGENT"に端末のシリアル番号が付加されます。これを使いたい所だが、やはりユーザ ID 通知が ON になっている場合という制限がつきます。しかし i-mode とちがって、ページを切りかえるたびに、確認画面が出ることはないのでまだ実用的です。でも、ユーザーにわざわざ、通知をONにしてくれと呼びかけるのは気が引けるな。
ezweb だったら
ezweb では端末固有の ID (サブスクライバー ID) が "HTTP_X_UP_SUBNO" として常に渡されます(これはezweb独自の環境変数です)。こいつは使えますね。ezwebではcookieも使えるので、これを使う方法もあります。
ちなみに、先に紹介しました3つのエミュレータは、これら各キャリア特有の ID を出力してくれません!最終テストはやはり実機で、と言う事になります。
パスワードに使える文字の種類の実際上の制限
ケータイではキーボードに比べ文字の入力が煩雑であることと、パスワード入力フォームの仕様によりパスワードに使える文字種に事実上の制限が起きます。
特にi-modeではパスワード入力フォーム(Basic認証時のパスワード入力フォームとinput要素の type="password")では文字の入力最中でも完全に伏字になるため、実際上パスワードには数字しか使えません。 数字以外を使いたい場合には、Basic認証は使わない、passwordタイプを使わずにtextタイプで済ます、などの対応が必要です。
J-sky、ezweb では文字の入力最中には伏字になりませんので、英字記号も使用できます。しかし、いずれにしても文字入力の煩雑さ、という根本的な制約があるため、長く文字種の多いパスワードの入力はユーザーに負担になります。パソコンからのアクセス時と同じパスワードを使いまわす場合には考慮が必要です。
実は、Basic認証であるならば、この問題を回避するちょっとした技があります。(どうもこの技はケータイのブラウザでは使えないかもしれません。F671iS では使えませんでした。)
Basic認証では「http://ユーザー名:パスワード@ホスト名/」とURIのなかにユーザー名、パスワードを埋め込めば、認証過程を省けます(手で入力する必要がない)。
そこで、例えば、ユーザー登録の際に、このユーザー名、パスワードを埋め込んだURIを通知し、それを保存しておいてもらえば、認証時の煩雑さは避けられます。この方法は、セキュリティーの問題も結構あるので、リスクとメリットを良く天秤にかけた上で使ってくださいね。
いろいろ
その他、全キャリア対応ページを作る上で、注意する点を並べておきます。
言語は何を使おうか?
各キャリア毎に言語の仕様が違って、これが全キャリア対応のページを作成する上での大きな障害になっています。しかし ezweb が WAP2.0 に準拠したことで全キャリアとも一つのページだけで対応できる道が開けました。
そうはいっても、以下のように細部の互換性は全くなく、大変ですが・・・。
ページ容量
i-mode では全機種対応とすれば5kバイトとなります。大まかに言って、210,503以降は10kバイトまでOKです。重要な注意点ですが、画像などのhtml以外の物もすべて含んでこの容量です。
J-skyでは「画像・テキスト込みで、パケット対応機(5xシリーズ)では12キロバイト、それ以外の機種では6キロバイトです。」
ezwebでは「XHTMLで記述するコンテンツは 9KB 程度以内で制作しなければなりません。また、HDMLで記述するコンテンツは、HDMLブラウザ端末の制限値(1デッキあたり、モノクロ端末:約1.2KB/カラー端末:約7.5KB)以内に収まるようにしてください。※ページ中に表示される画像データなどは上記サイズに含まれません。」とのことです。(綺麗にまとまっていたので、公式サイトからそのまま引用)
以上を考えると、文字中心のサイトならば、端末ごとの振り分けはせずに、画像も含め「5kバイト」で作ればいいと思います。ケータイで5k分の文字を読むのは大変なぐらいです。
画像中心の、例えば壁紙を配るようなサイトであれば、端末ごとに振り分けないとダメでしょうね。対応する画像フォーマットも違うし、画面の大きさも違うし、大変です。私は、このようなサイトを作る予定が全くないので、これ以上は考えません。皆さん、各々苦しんでくださいませ。
画面1行の文字数
これはズバリ全角8文字が基準です。ページのタイトル部分は、なるべくこの文字数以内に納めるべきです。そのためには半角カタカナや絵文字が役に立ってくれます。
絵文字
絵文字は各キャリアで互換性がありません。ただし、AUの端末で i-mode のページを読みこむと、サーバーが自動的に近似の絵文字に変換してくれます。実際の変換の規則は、キャリアのページをご覧ください。私の私見ですが、良く使いそうなものに関しては、適切に変換してくれているような気がします。
絵文字だけに関していえば、J-skyだけ別のページを用意するか、cgiを使って変換するか、そもそも絵文字を全く使わないか、の選択が必要です。
i-mode で cgi 作成時に気をつけること
i-mode では cgi 作成時にヘッダーに "Content-Type" の他に "Content-Length" を出力することが必須です。次のように出力します。
#!/usr/local/bin/perl

#文字セットについては全く考慮してません
#Content-Length の出し方だけ

my $html = << "HTML";
<html>
<head><title>ほめぱげのホームページ</title></head>
<body>はろー</body>
</html>
HTML

#バイナリモードで出力して環境の違いによる改行コードの差をなくす
binmode STDOUT;

print "Content-Type: text/html\n";
print "Content-Length: ",length($html),"\n";#Length 出力
print "\n";
print "$html";
F671iS で確認したところ"Content-Length"をきちんと認識しているようです。実際のコンテンツの容量より少ない値を出力してみると、途中までしか読み込まれませんでした。多い値の場合には特に問題はありませんでしたが、正確な値を出力すべきでしょう。
ドコモによるとSSL使用時に"Content-Length"のありなしで端末の挙動が異なるようです。
こまごま
そのほか、テンキーによるリンクのショートカットの指定の仕方、フォームでの入力モードの指定の仕方、などの互換性がありません。これもAUのサーバはi-mode仕様のページならば器用に変換してくれますが、J-PHONE ではしてくれません。
詳細は、次回書きます。
基本的な方向性としては、i-mode を中心に据え、AUの変換機能を最大限に生かしつつ、J-PHONE にどう対応するか?といった感じでしょうか。こう見ていくと「こんなことぐらい仕様を統一してくれよ!」っていいたくなる事がたくさんありますよね。
AirH"PHONE について
ついにH"にもブラウザが乗りました。仕様を簡単にまとめておきます。
ページ容量は画像を含め50kbyte、cookie使用可、Basic認証もたぶん使える。
メールアドレス通知機能、発信者電話番号通知機能あり。認証に使えそう。
参考にした主な情報源
各キャリアのサイト
DoCoMo Net i-mode
J-PHONE Developer Program
EZweb ホームページを作ろう!
AirH"PHONE用ホームページの作成方法
その他
パナソニックのネットワークカメラの動作確認情報で、Basic認証が使える端末リストが載っています。
Basic認証の仕組み、仕様については『Web+DB press (Vol.3)』を参考にしました。
ezweb については『EZwebホームページ制作完全マニュアル』を参考にしました。特に hdlm に関しては、これ以上詳しい本はないでしょう。ただし発売が2001年8月なので、WAP2.0についてはあまり触れていない。(この分野の本は1年もしたら内容が古くなるー。すごい世界だよね。)
最後に
最近のJ-PHONE、AU の躍進により DoCoMo も自分の好き勝手と言うことは出来ない状況になりつつあります。これに伴い、各キャリアの規格が世界基準に統一されていく方向に結構早く向かうと思います。これはみんなにとって一番ハッピーな結果です。うれしいです。3社ぐらいが同じぐらいのシェアで共存する形が一番よさげな気がします。(ちなみに私はH"ユーザーです)
今回はウェブに関して中級者以上の内容になってしまいました。もっと詳しく私にも分かるように、という方がいらっしゃいましたらお気軽に掲示板まで要望ください。暇なのでお答えできると思います。
それではまた。