论坛: 开发者论坛 (Thread #32621)

実績システムの認証方法 (2012-08-05 22:49 by eagletmt #64956)

Android 側でもユーザ名+パスワードで認証しよう、という話でしたが、どうせユーザ登録をウェブページ上で行うならトークン使った認証でもいいんじゃないかと思いました。

流れとしては、
- ウェブページ上でユーザ登録
- ここでユーザに固有のアクセストークンを生成
- プロフィールページ(仮)に表示されているアクセストークンを見て、ユーザは CUTEn にそのトークンを入力する
- CUTEn は認証が必要な HTTP リクエストを送るとき、常に「auth_token=アクセストークン」というパラメータを追加する
というようなものを想定しています。

アクセストークンはランダムな20文字の英数字です (単に devise [1] がこうなっているだけで、変更は可能)。
アクセストークンはリセット可能で、リセットした場合、古いアクセストークンは無効化されます。

[1] https://github.com/plataformatec/devise/

トークンを使った認証のメリットとしては
- CUTEn で「ログイン」のステップが不要
- なのでユーザ名・パスワードの保持/送信も不要
- ログインして Cookie のセッション ID を保持して… とかより CUTEn 側の実装が楽な気がする
あたりでしょうか。

逆にデメリットとしては
- ユーザにとって、ランダムな英数字20文字を入力するのは面倒かも
- ただしこれは、初回およびユーザが明示的にトークンをリセットしたときのみ必要
と考えています。

どうでしょうか。

RE: 実績システムの認証方法 (2012-08-07 16:41 by kato-sh4k #64983)

このトークンをCUTEn側で保持して、サーバにアクセスするときに付加するってことですよね。
CUTEn側で保持しているトークンが正しいものかの確認は、起動時に行うんですか?それともサーバアクセス時に毎回行うんですか?
回复到 #64956

RE: 実績システムの認証方法 (2012-08-15 13:47 by eagletmt #65085)

> このトークンをCUTEn側で保持して、サーバにアクセスするときに付加するってことですよね。
そうです。

> CUTEn側で保持しているトークンが正しいものかの確認は、起動時に行うんですか?それともサーバアクセス時に毎回行うんですか?
サーバアクセス時にサーバ側でトークンをチェックし、もし不正だった場合は 401 エラーを返すなどします。
入力ミス等を早い段階でユーザに知らせるために、トークン登録時に試しにトークンを使ってアクセスしてみて 401 が返らないかどうか確認する、というようなクライアント側の実装はアリだと思います。
回复到 #64983

RE: 実績システムの認証方法 (2012-08-14 02:27 by rushia #65072)

Twitterクライアントで認証するときに8桁くらいの数字で行うあれですね
20桁でも、テキストボックス内に表示ができるならばコピペもしやすいので十分ありだと思います

端末内(に限らなくても良いけれど)で、パスワードなどの手段でトークンを再表示できるようにすれば、時間差での2台目以降との連繋も容易なのかな、と思います
回复到 #64956

RE: 実績システムの認証方法 (2012-08-15 13:52 by eagletmt #65086)

> 端末内(に限らなくても良いけれど)で、パスワードなどの手段でトークンを再表示できるようにすれば、時間差での2台目以降との連繋も容易なのかな、と思います
トークンは明示的にリセットしない限り不変です。Twitter の OAuth 認証のときに使う PIN コードのようなワンタイムのものとは性質が異なります。
なので、トークンは Web ページからいつでも閲覧できるし、2台目以降も1台目と同じトークンを入力することになりますし、もしトークンをリセットした場合はすべての端末で入力し直すことになると思います。
回复到 #65072