認証フローの設計
ユーザーが複数の方法(Facebook、Twitter、ローカルアカウント)で登録およびログインできるサービスを作成する場合、複数の方法でアカウントの作成と検証を処理するための最良の方法は何ですか?
言い換えると
この状況を想像してみてください。
- ユーザーは、自分の(またはおそらく誰かの)電子メールとパスワード(ハッシュされるなど)を送信して、通常のアカウントを作成します
- 便宜上、ユーザーは新しく作成したアカウントにすぐにアクセスできます(メールアドレスを確認する必要はありません) 。
- 次に、ユーザーは外部のoAuthサービス(Twitter、Facebookなど)でログインしようとします。
- Facebookでログインすると、同じメールアドレスでアカウントが(手動で)作成されていることがわかりました
これを処理するための最良の方法は何ですか?
私は、ユーザーフレンドリー(便利)で安全なソリューションを考え出そうとしていますが、セキュリティ上の欠陥の可能性が私を怖がらせています。
例
例としてWebサービス「Mixlr」を使用して、これをどのように処理するかを見てみましょう。
- 私はあなたのメールアドレスでアカウントを作成します(あなたのために吸います)
- Mixlrはすぐにログインして、サービスの使用を開始できるようにします(便利です)
- 彼らはまた、私のアカウントを確認するために私に電子メールを送信します(私はすでにそれを使用していますが)
- Mixlrに参加することにしたので、アカウントを作成します。ただし、従来の登録プロセスを使用する代わりに、Facebookを使用してMixlrアカウントを作成することを選択します。
- 興味深いことに、Facebookは私が私のアカウントを作成するのに使用したのと同じメールアドレスをあなたに送り返します
- Mixlrはアカウントを「マージ」することを決定し、Facebookアカウントを新しい「接続されたアカウント」としてサービスに追加するだけです。
そこに問題があります
サービスを使用してまだログインしている場合は、技術的にはFacebook アカウントを少し制御できます。
それは安全ではありませんか...そして率直に言って、少し大ざっぱです?
ただし、Mixlrは、ユーザーが自分の電子メールアドレスを確認/確認しない限り、ユーザーが「2回目」でログインすることを許可しません。
基本的に、登録時にユーザーが自分の電子メールアドレスを確認することを最初に要求しない限り、利便性とセキュリティの中間点が何であるかはわかりません。