1

私の MVC Web アプリでは、内部認証と Windows Azure Active Directory (ACS なし) の両方を ID プロバイダーとして使用しようとしていました。このアプリを Azure アプリケーションに追加して、Azure からユーザーを認証できるようにすることができました。

ACS なしで、Azure ユーザーとローカル ユーザーの両方を使用してログインできました。

私の問題は、Web アプリから Azure ユーザーをログアウトできないことです。ローカル ユーザーはログオフをクリックするとログアウトされますが、問題は azure アカウントにあります。デフォルトのシンプルな MVC サンプル アプリを使用してこれらをテストし、あちこちにいくつかの変更を加えましたが、大きな変更はありません。

        [HttpPost]
   // [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        Session.Clear();
        Session.Abandon(); 
        WebSecurity.Logout();
        FormsAuthentication.SignOut();
        return RedirectToAction("Login", "Account");
    }

これは、ログオフに使用したコードです。私の見解では、偽造トークンの問題にも直面しました。@Html.AntiForgeryToken() を追加しても役に立ちませんでした。

私の実際のコードは -

      [HttpPost]
   // [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        WebSecurity.Logout();
        return RedirectToAction("Login", "Account");
    }

しかし、いくつかのブログで見つけたいくつかの提案に基づいて、これを前者に変更しました。

Azure ユーザーをログアウト/サインアウトするにはどうすればよいですか? この問題に役立つ Cookie を削除することはできますか?

[ログオフ] をクリックすると、実際にログアウトせずに同じページが返されます。しかし、内部アカウントを使用すると、アプリからログアウトしてログイン ページに戻ることができます。

私は VS2012 を使用し、WS-Federation (プロトコル) と Windows Identity Foundation (WIF) 4.5 (フレームワーク) を使用して、Identity and Access ツールを使用して Azure AD に接続しました。

ありがとう !

4

1 に答える 1

1

答えは、Azure AD へのサインインに使用しているプロトコルと ID ミドルウェア/フレームワークによって異なります。VS2012 でアプリをビルドし、Identity and Access ツールを使用してそれを Azure AD に接続した場合、おそらく WS-Federation (プロトコル) と Windows Identity Foundation (WIF) 4.5 (フレームワーク) を使用しています。VS2013 を使用していて、新しい Web アプリケーションを作成するときに [認証の変更] ボタンをクリックし、Azure AD ディレクトリにサインインした場合も同様です。これらのシナリオでは、WIF が HTTP モジュールを使用して WS-Fed とセッション管理を処理し、セッション モジュールと対話してユーザーのセッションを終了し、サインアウトする必要があることを知っておく必要があります。アプリケーションからユーザーをサインアウトする (フェデレーション認証 Cookie をクリアする) には、SignOut()

FederatedAuthentication.SessionAuthenticationModule.SignOut();

現在 Azure AD でサインインしているすべてのアプリケーションからユーザーをサインアウトするシングル サインアウトが必要な場合、WS-Federation には、特定のサインアウト メッセージを Azure AD に送り返す独自のサインアウト フローがあります。ユーザーがサインアウトしたことを知らせます。詳細については、このトピックを参照し、サインアウトに関するセクションまで下にスクロールしてください。

VS2013 と OWIN 認証ミドルウェアを使用している場合は、現在の OWIN コンテキストの認証 "マネージャー" を取得し、そのSignOut()メソッドを次のように呼び出すだけです。

HttpContext.GetOwinContext().Authentication.SignOut()

于 2014-04-16T00:44:31.750 に答える