OAuthやOpenIDを使わないPassword-Less Authenticationは可能か?

読了まで:約2分


概要: と​いうような​コトを​今日の​午前中、​ずっと​考えてた


結論から​言うと、​既に​存在した。​それが​以下​:


で、​上記リンク先の​認証方​法は​凄い​簡単で、

  1. ログインする​際に​ユーザーに​メールアドレス入力させる
  2. 入力された​メールアドレスに​ワンタイムトークンくっつけて​送る
  3. ユーザーは​ワンタイムトークン付きリンクを​踏む
  4. すると​認証されてログイン完了

と​いう​感じ。

で、​僕は​これ見て​思ったのが、

ログインする​たびに​メール送られてくるの​ウザくね?

とか​素直に​思いました。


で、​上記の​認証方​法も​結構​変態と​言えば​変態なんだけど、​僕なりに​考えた​結果、

  • メール送る​代わりに​ Websocket with SSL/TLS で、​公開鍵認証すれば​いいんじゃね?

とか​思いついたので、​それも​書いておくと、

  • 前提 1. ユーザーは、​公開鍵と​秘密鍵の​ペアを​ブラウザ上で​保持しておく​ 例えば​ localStorage とか
  1. サーバーは、​ユーザーの​公開鍵を​ユーザー登録時に​保持しておく
  • 認証 1. ユーザーは、​ログイン画面で​ユーザー名を​入力
  1. サーバーは、​ 1. ログイン用の​ワンタイムトークンを

  2. 入力された​ユーザー名に​紐づく​公開鍵で​暗号化し

  3. WebSocket with SSL/TLS で​送信する

  4. 暗号化された​ワンタイムトークンを​受け取った​ユーザー側は​ 1. 秘密鍵で​ワンタイムトークンの​暗号化を​解除

  5. 今度は​その生の​ワンタイムトークンを​ Websocket with SSL/TLS で​送信する

  6. 生ワンタイムトークンを​受け取った​サーバー側は、​ 1. ワンタイムトークンを​検証

  7. 検証して​整合した​場合、​ログインを​許可する

と​いう​感じ。​うん、​どう​考えても​変態ですね。


で、​これを​書いていて​気が​ついたんだけど、​これ、​ブラウザ上で​変態な​実装しなくても

とか​使えば​良いんではないだろうか、とか​思ったりした。

どういう​事か、って​いうと、​簡単に​言えば、

  • ログインの​際の​ワンタイムトークンの​云々を​ Authy に​丸投げする

と​いう​感じ。

まあ Authy は​本来、​二段階認証の​為の​ツールなんだけど、​それを​あえて​ Authy のみの​認証に​してしまうと​いう。​ただまあ、​その​方法は、​ちょっと​アレゲな​気もしないでもないけど。


まあとりあえず​今日​考えて以上です。​はい。

#FIXME

アバターアイコン兼ロゴ

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。次に備えて待機中。

今は趣味でプログラミングをして生活しています。