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

読了まで:約1分


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


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


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

  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

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

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

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