ユーザ認証機能
Marble Note でのユーザ認証について*1お話があったので、開発経過を見ていて運用でもサポートしている者の視点でどうしてこうなったのかを書いてみる。
Mable Note ではユーザ登録することでユーザ用のセレクションを作ることができたり、ゴーストにコメントをつけたりすることができる。ユーザ登録しなくても更新情報や登録情報を見ることはもちろんできる。
では Mable Note でのユーザ認証をどうしているかというと、TypeKey とはてなアカウントを利用している。これは外部認証などと呼ばれている方法で、認証機能に関する雑多な処理を代行してもらえるサービスを使っている。なぜ TypeKey とはてなアカウントの2つを利用しているかというと、これらのアカウントサービスを使っている人がそれなりにいるだろうという予測と、アカウント取得が割と簡単だということだっだ*2。
もちろん自前で認証機能を用意するという案もあったのだが、Marble Note の開発初期の段階で諦めていた。理由はセキュリティの関係で色々面倒だったから。当時の id:yune_kotomi さんの能力面の問題もあっただろうし、作り始めたころの Ruby on Rails にはこれといった認証機能プラグインやエンジンがなかった or 使いづらかったというのもあるし、私としてはサーバ管理者として個人情報に関するリスクは避けたかったというのもあった。やれば出来ただろうし今なら出来るだろうけど Marble Note 一つ作るくらいの労力を認証機能に使う気にはなれなかった。
経緯はこんなところだけども外部認証によってどんなメリット・デメリットがあるか。
- ユーザの一意性の確保
- 例えば fifth_moon というユーザが一人であるという保証をしてもらう。
- 何をいまさらなことだけど、これが保証されないと認証なんてできない。
- ユーザの正当性の確保
- 本人確認をしてもらう。
- 何をいまさらなことだけど、パスワード認証に関するクラックの技の多さに自前で対策するのがいやになる。
- パスワード管理の代行
- 個人情報を持たない
- メールアドレス等の個人情報を Marble Note で持たないですむ。
- Marble Note のような情報管理がどうなってるかユーザ側では判断のしようが無いことも、外部認証サービス側の情報管理ならばある程度信用できるであろう。
- 外部認証サービス側には個人情報を登録しないといけない。
- 外部認証を受け入れてもらえるか
このぐらいは検討したように思う。色々並べたけれども要約すると個人情報の管理とセキュリティー対策の一部を丸投げすることによって楽をしようということになる。外部認証を受け入れられないユーザには申し訳ないが「ごめんなさい、これが Marble Note なんです」とゆうことになってしまうのだが。
そんなこんなあって外部認証を使うことになったのだけれども、これでユーザ認証が全てうまくいくわけでもなく、XSS や CSRF やなんやかんやセキュリティ対策はしないといけない日々は続いている。