それは実際にはあなたが説明するよりも悪いです。後続のユーザーは、アプリケーションだけでなく、プロバイダー (google/facebook など) でユーザー アカウントにアクセスできます。
これを処理する良い方法は見つかりましたか?以下にいくつかの提案をしましたが、パイプラインで利用可能なより良いオプションがあることを願っています.
あなたが説明したことは、私の観点から見ると、システム全体の本当の問題であり、ちょっとした穴です。あなたが示すように、asp.net MVCを使用すると、 WebSecurity.Logout() はユーザーをプロバイダーからログアウトしません。
いくつかのオプションを提供した後、なぜそれが問題だと思うのかを示します。両方のソリューションの重要な点は、ユーザーがプロバイダーからログアウトすると、再認証せずにサイトにログインできなくなり、プロバイダーのユーザー アカウントを開いたままにできないことです。
プロバイダーが何であれ、ログオフします。プロバイダーが facebook の場合は、この回答の指示に従ってください。プロバイダーが google の場合、「 https://accounts.google.com/Logout 」にリダイレクトできます。残念ながら、これは少し扱いにくく、プロバイダーによって異なります。
ユーザーがサイトで「ログアウト」をクリックすると、プロバイダーからログオフしてからプロバイダー サイトに移動する必要があることを示すメッセージが表示されます。たとえば、プロバイダーが Google の場合、ユーザーがログオフをクリックすると、「忘れずに Google からログオフしてください」などのメッセージが表示され、www.google.com に誘導されます。これにより、実際にログオフされるわけではありませんが、少なくとも一貫性は保たれます。これは、より良いものが見つかるまで私が使用しているアプローチです。それらをサイトから排除することは理想的ではありませんが、少なくとも大きなセキュリティ上の欠陥にさらされることはありません.
ユーザーをプロバイダーにログインさせたままにしておくことが悪いと私が考える理由は、次の例で示されます。
- ユーザーは公共のコンピューターを使用しています。
- ユーザーが EmergencyIceCream (架空の) サイトを開きます。
- EmergencyIceCream サイトで、ユーザーはプロバイダ (例: google/facebook) を使用してログインすることを選択します。
- ユーザーが緊急アイスクリームを注文し、[ログアウト] をクリックします。
- ユーザーは、EmergencyIceCream ホームページに戻ります。
- ユーザーはログアウトしたことに満足しています。
- BadUser がコンピューターにアクセスし、プロバイダーのサイト (例: google/facebook) にアクセスして、ユーザーのアカウントとユーザーのアカウントに関連付けられたアプリケーション (EmergencyIceCream を含む) にアクセスして制御できるという幸運を信じることができません。
ソーシャルプロバイダーからもログアウトするオプションがあるべきだと思います。これが OAuthWebSecurity の内部で実行できるものなのか、open-id/oauth 実装で変更する必要があるのか はわかりません。各プロバイダーから個別にログアウトするコードを用意することは、あまり良い選択肢ではないと思います。これが oauth の仕組みであり、それと一緒に暮らすか、独自の認証と承認を使用する必要があることに同意しません。アプリのログイン プロセスを簡素化する OAuthWebSecurity 機能の利用者として、やるべきことが増え、ユーザーのセキュリティが弱体化しています。また、プロバイダーからログアウトすると問題が解決するという事実は、これを解決する方法があることを示しています。