読者です 読者をやめる 読者になる 読者になる

カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

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

Development Thinking

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


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


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

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

という感じ。

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

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

とか素直に思いました。


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

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

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

  • 前提
    1. ユーザーは、公開鍵と秘密鍵のペアをブラウザ上で保持しておく
      • 例えば localStorage とか
    2. サーバーは、ユーザーの公開鍵をユーザー登録時に保持しておく
  • 認証
    1. ユーザーは、ログイン画面でユーザー名を入力
    2. サーバーは、
      1. ログイン用のワンタイムトークンを
      2. 入力されたユーザー名に紐づく公開鍵で暗号化し
      3. WebSocket with SSL/TLSで送信する
    3. 暗号化されたワンタイムトークンを受け取ったユーザー側は
      1. 秘密鍵でワンタイムトークンの暗号化を解除
      2. 今度はその生のワンタイムトークンをWebsocket with SSL/TLSで送信する
    4. 生ワンタイムトークンを受け取ったサーバー側は、
      1. ワンタイムトークンを検証
      2. 検証して整合した場合、ログインを許可する

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


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

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

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

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

という感じ。

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


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