minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

携帯サイトでユーザー認証をする方法はいくつかあります。
一番簡単なのは、ユーザ名とパスワードを使う方法です。
しかし、毎回入力するのはユーザにとっては面倒ですよね。

PCサイトならばクッキーを使ってこれらの情報を保存しておけるので
毎回入力する必要はありません。
しかし携帯サイトではクッキーが使えない(一部機種によって可能らしい)ので
別の手法を取ることを考えなくてはいけません。
そこで出てくるのが、携帯端末の個体識別情報(uid)を使うというやり方です。

携帯電話は電話番号と同じように、その端末を識別するIDのようなものを持っています。
これを利用すれば、アクセスしてきたのがどのユーザなのかを判別することが可能になるというわけです。

キャリアによって取得方法や制限などがあるので、以下に紹介します。
なお、個体識別情報はキャリアによって様々な言い方があるようですが
ここでは便宜上「端末ID」「ユーザーID」という2種類に統一して表記します。

端末ID

端末固有の値で、例えば端末の利用者が変わった場合などにも変わらないので
新利用者が旧利用者のユーザー認証情報をそのまま利用できてしまう危険性があります。

ユーザーID

個体識別情報と違い、利用者が変わればユーザー情報も変わります。
そのため、個体識別情報と比べて安全です。
略して uid と呼ばれることもあります。

Docomo

2つの方法があります。

utnを使う

FORMによる送信時に個体識別情報を送信する方法です。
FORMタグにutn属性を付加します。

<form ... utn>
  ...
  <input type="submit" ...>
</form>

このようにすると、送信時に個体識別情報を一緒に送ることができます。
ただし、毎回利用者に対して確認画面が表示されます。

個体識別情報はUser-Agentの一部として送られます。

FOMA以外

製造番号(11桁)がUser-Agentの最後に付加されます。

DoCoMo/1.0/X503i/c10/ser***********

*********** の部分に製造番号が入ります。

FOMA

FOMA端末製造番号(15桁)およびFOMAカード製造番号(20桁)がUser-Agentに付加されます。

DoCoMo/2.0 YYYY(c10;serXXXXXXXXXXXXXXX; iccxxxxxxxxxxxxxxxxxxxx)

XXXXXXXXXXXXXXX の部分にFOMA端末製造番号、
xxxxxxxxxxxxxxxxxxxx の部分にFOMAカード製造番号が入ります。

製造番号およびFOMA端末製造番号が「端末ID」で、
FOMAカード製造番号が「ユーザーID」という位置付けになります。

NULLGWDOCOMOを使う

utnを使った方法にはいくつかの欠点があります。

これらの欠点を解消する方法として、もう一つの方法を紹介します。
ただし、DOCOMOからの公認が必要となります。
使い方は簡単で、URLに決まったキーワードを付加するだけです。

http://some/foo?uid=NULLGWDOCOMO

このように、uid=NULLGWDOCOMO というパラメータをURLに付加します。

すると、これが自動的にユーザーIDに変換されます。
例えば以下のような感じに。

http://some/foo?uid=012345678901

サイト側ではこの uid を見てユーザー情報を識別できることになります。
Java Servlet ならばこんな感じに。

request.getParameter("uid")

ちなみに、2007/1現在 uid は12桁のようですが
これは正式にアナウンスされた情報ではないので今後変わる可能性があります。

Softbank (Vodafone)

Vodafone端末は、User-Agentに端末IDを付加します。
ただし、端末の設定により「ユーザID通知」をOFFにしていると付加されません。

Vodafone/1.0/V904SH/SHJ001/SNxxxxxxxxxxxx

xxxxxxxxxxxx の部分に「端末シリアル番号」と呼ばれるものが入ります。
Docomoの製造番号と同じように、端末固有ですので若干の危険性があります。

HTTP_X_JPHONE_UID (x-jphone-uid) を使う

C型と呼ばれる古い機種を除いて、ユーザーIDを取得する方法があります。
この方法の場合、HTTPリクエストヘッダに情報が付加される為
URLを加工したりする必要はありません。

HTTP_X_JPHONE_UID にユーザーIDが入っているのでこれを利用します。
例えば Java Servlet を使うと

request.getHeader("x-jphone-uid")

で取得できます。

なお、C型でもSoftbankに登録をすれば
ユーザーIDが取得できるようになるようです。

au

au 端末では、ユーザーIDをEZ番号(サブスクライバ ID)として管理しています。
この情報はHTTPリクエストヘッダに付加されますが、
端末の設定によって付加されないことがあります(EZ番号通知設定)。
ユーザーIDの取得方法は以下の通りです。

request.getHeader("X-Up-Subno")

取得結果は、

01234567890123_xx.ezweb.ne.jp

のようになります。