私はsled.comでこれを経験しました。アカウントの作成とログイン用の複数のサードパーティアカウントのサポートに関して、ここには複数の問題があります。それらのいくつかは次のとおりです。
- ローカルパスワードとサードパーティのログインの両方をサポートする必要がありますか?
sled.comの場合、追加する値が小さく、パスワード入力フォームを保護するための追加コストがかかるため、ローカルパスワードを削除することにしました。パスワードを破る攻撃は数多く知られています。パスワードを導入する場合は、簡単に破れないようにする必要があります。また、漏れを防ぐために、一方向ハッシュなどに保管する必要があります。
- 複数のサードパーティアカウントをサポートする際に、どの程度の柔軟性を許可しますか?
Facebook、Twitter、LinkedInの3つのログインプロバイダーをすでに選択しているようです。これは、OAuthを使用し、明確に定義された一連の信頼できるプロバイダーと連携していることを意味するため、すばらしいことです。私はOpenIDのファンではありません。残りの質問は、同じプロバイダーからの複数のサードパーティアカウントをサポートする必要があるかどうかです(たとえば、2つのTwitterアカウントがリンクされた1つのローカルアカウント)。いいえと思いますが、そうする場合は、データモデルに対応する必要があります。
Sledの場合、Facebook、Twitter、Yahoo!でのログインをサポートしています。各ユーザーアカウント内に、それぞれのキーを保存します:{"_id": "djdjd99dj"、 "yahoo": "dj39djdj"、twitter: "3723828732"、 "facebook":"12837287"}。各サードパーティアカウントが単一のローカルアカウントにのみリンクできるように、一連の制約を設定します。
同じサードパーティプロバイダーからの複数のアカウントを許可する場合は、リストまたは他の構造を使用してそれをサポートする必要があります。また、他のすべての制限を使用して一意性を確保する必要があります。
ユーザーが初めてサービスにサインアップするとき、ユーザーは最初にサードパーティプロバイダーにアクセスし、検証済みのサードパーティIDを持って戻ってきます。次に、それらのローカルアカウントを作成し、必要なその他の情報を収集します。私たちは彼らの電子メールアドレスを収集し、ローカルユーザー名を選択するように依頼します(他のプロバイダーからの既存のユーザー名をフォームに事前入力しようとします)。何らかの形式のローカル識別子(電子メール、ユーザー名)を持つことは、後でアカウントを回復するために非常に重要です。
サーバーは、ブラウザーに既存のアカウントのセッションCookie(有効または期限切れ)がなく、使用されているサードパーティのアカウントが見つからない場合、これが初めてのログインであることを認識します。ユーザーがログインしているだけでなく、新しいアカウントを作成していることをユーザーに通知します。これにより、ユーザーが既にアカウントを持っている場合は、代わりに既存のアカウントで一時停止してログインできるようになります。
追加のアカウントをリンクするためにまったく同じフローを使用しますが、ユーザーがサードパーティから戻ってきたときに、有効なセッションCookieの存在を使用して、新しいアカウントをログインアクションにリンクする試みを区別します。各タイプのサードパーティアカウントは1つだけ許可されており、すでに1つリンクされている場合は、アクションをブロックします。新しいアカウントをリンクするためのインターフェースが(プロバイダーごとに)すでにある場合は無効になっているため、問題はありませんが、念のためです。
ユーザーがすでにローカルアカウントにリンクされている新しいサードパーティアカウントをリンクしようとした場合、2つのアカウントをマージすることを確認するようにユーザーに求めるだけです(データセットでそのようなマージを処理できると仮定すると、多くの場合、簡単に言うことができます)行われるよりも)。マージをリクエストするための特別なボタンを提供することもできますが、実際には、別のアカウントをリンクするだけです。
これは非常に単純なステートマシンです。ユーザーは、サードパーティのアカウントIDを使用してサードパーティから戻ってきます。データベースは、次の3つの状態のいずれかになります。
- アカウントはローカルアカウントにリンクされており、セッションCookieは存在しません->ログイン
- アカウントはローカルアカウントにリンクされており、セッションCookieが存在します->マージ
- アカウントはローカルアカウントにリンクされておらず、セッションCookieは存在しません->サインアップ
アカウントはローカルアカウントにリンクされておらず、セッションCookieが存在します->追加アカウントのリンク
- サードパーティプロバイダーでアカウントリカバリを実行するにはどうすればよいですか?
これはまだ実験的な領域です。ほとんどのサービスはサードパーティアカウントの隣にローカルパスワードを提供するため、「パスワードを忘れた」ユースケースに焦点を当てており、他のすべてがうまくいかない可能性があるため、これに最適なUXは見ていません。
Sledでは、「サインインのサポートが必要ですか?」を使用することを選択しました。クリックしたら、ユーザーにメールアドレスまたはユーザー名を尋ねます。調べて、一致するアカウントが見つかった場合は、そのユーザーに、サービスに自動的にログインできるリンクをメールで送信します(1回限り有効)。入ったら、アカウントのリンクページに直接移動し、確認して追加のアカウントをリンクする可能性があることを伝え、すでにリンクしているサードパーティのアカウントを表示します。