Web ネットワーク用のシングル サインオン システムを構築しました。それはこのように動作します:
- ユーザーは、ログインしたいサイト (「安全でないサイト」) のログイン リンクをクリックします。安全でないサイトの ID が URL で渡されます。
- 彼は最終的にシステムの (「RAS」と呼ばれる) ログイン ページにたどり着きます。これは独自のドメイン上にあり、将来的には HTTPS を取得する可能性があるため、ユーザーは自分のデータが安全であることを確認できます。
- ユーザーがログインします。ユーザー ID、安全でないサイト ID、および有効期限を保持する「セッション」がサーバー上で作成されます。
- ユーザーのブラウザは安全でないサイトにリダイレクトされます。新しく作成されたセッションの ID は、URL パラメーターとして渡されます。
- 安全でないサイトは、ユーザーのデータの要求を RAS に送信します。これには、セッション ID と、RAS 上の安全でないサイトを識別して認証する資格情報が含まれています。(ユーザーとそのブラウザは完全に除外されていることに注意してください)
- ユーザーのデータ (パスワードなし) は安全でないサイトに返されます。次に、安全でないサイトはこれを独自のセッションに保存しますが、それは問題ではありません。
(動作を確認するには、cncguild.net などにアクセスし、上部近くにあるログイン リンクをクリックします)
ご覧のとおり、これはかなり安全です。安全でないサイトがユーザーのパスワードにアクセスすることは決してありません。
ただし、使いやすさに関しては、ログイン プロセスを安全でないサイトと統合したいと考えています。これを行う方法は、「ログインページに送信してリダイレクトする」全体を行う代わりに、ある種のポップアップを開くことです。現在、これを行うには3つの方法があります。
ログイン フォームにオーバーレイ div を追加します。ログインが完了し、クライアント側のコードがセッション ID を受け取るまで、AJAX を使用して RAS と通信します。次に、このセッション ID を独自のサーバー側コードに (更新または AJAX を介して) 送信することにより、ユーザー データの取得を処理できます。これにより最高のユーザビリティが得られますが、セキュリティ上の重大な落とし穴がいくつかあります。
- 安全でないサイトの Javascript がパスワードにアクセスできます
- ユーザーはソースをチェックして盗もうとしているかどうかを確認できますが、誰が真剣にそれを行うのでしょうか?
フォームを同じ HTML ドキュメントに配置する代わりに、オーバーレイ div にログイン ページの iframe を含めます。
- これにより、安全でないサイトからパスワードが隠されます (ブラウザーに適切な iframe Javascript セキュリティ ポリシーがある場合)。
- ユーザーにそうであることを示す明確なブラウザ インターフェイス マーカーはありません。したがって、悪意のある安全でないサイトの作成者は、まったく同じように見えるログイン フォームの独自のコピーを作成することができますが、実際には iframe にはありません。
- 更新する以外に、セッション ID を安全でないサイトに戻す方法はありません。安全でないサイトにログインするための派手な AJAX はありません。
実際のポップアップでログイン ページを開く (window.open)
- URL と HTTPS アイコンが明確に表示されます
- それは本当に醜いかもしれません。ユーザビリティが現在の動作方法に比べて実際に多くのメリットがあるかどうかはわかりません.
これらの 3 つの選択肢のそれぞれについて、あなたはどのような意見をお持ちですか? もちろん、私は最初のオプションの嘲笑を期待しています。それはセキュリティを粉々に引き裂きます。完全を期すために含めました。追加オプションも大歓迎