web-dev-qa-db-ja.com

OWIN-Authentication.SignOut()はCookieを削除しないようです

OWIN Cookie認証に問題があります。 Cookie認証とベアラトークンで保護されたWebAPIリソースを使用するいくつかのMVCページがある.Netサイトがあります。

ログアウトすると、クライアントのアクセストークンが削除されるため、後続のAPIリクエストにはヘッダーにトークンが含まれないため、認証に失敗します。この部分は大丈夫です。

同じ方法で、MVCページで使用されているCookieをログアウトして削除したいです。サーバーで次のことを行いました。

    [Route("Logout")]
    public IHttpActionResult Logout()
    {
        var ctx = Request.GetOwinContext();
        var authenticationManager = ctx.Authentication;
        authenticationManager.SignOut();
        return Ok();
    }

ただし、ログアウトを呼び出した後、Cookieがログアウトコールによって削除されたと思われる場合でも、保護されたMVCページにアクセスできます。

それはとても簡単に思えるので、私は何かを逃したかもしれません。

おかげで、

32
jaeyow

過去数日間、同様の問題がありました。の代わりに

Request.GetOwinContext().Authentication.authenticationManager.SignOut();

次のうち1つ(および1つのみ)を使用します。

Request.GetOwinContext().Authentication.SignOut();

Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);

HttpContext.Current.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);

この記事では、Cookieが削除されない理由について説明します。 http://dotnet.dzone.com/articles/catching-systemwebowin-cookie

私の答えが最も研究に基づいているわけではないことは知っていますが、実を言うと、提供されたコード例が私にとって役立つ理由を見つけることができませんでした。別の方法でSignOut()を実行すると、System.WebがOwins Cookieを台無しにすることを知っています。

42
Stralos

これは私のために働いた。 Cookieを無効にする場合は、コントローラーにスローします。特に、@if(User.IsInRole("Admin")){...}の下に読み込まれるメニューを修正するためにユーザーが手動でログアウトしてから再度ログインする必要がないように、これを使用してユーザーのロールを更新しました。これが誰かの助けになることを願っています-これを理解するのに時間がかかりました。

    var updatedUser = await UserManager.FindByNameAsync(User.Identity.Name);
    var newIdentity = await updatedUser.GenerateUserIdentityAsync(UserManager);
    AuthenticationManager.SignOut();
    AuthenticationManager.SignIn(newIdentity);
2
JSideris

上記のすべての解決策に従いましたが、ユーザーがログオフしなかったため、最後に混乱しました。最後に私の問題は以下によって解決されました:

Request.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
FederatedAuthentication.SessionAuthenticationModule.SignOut();

SessionAuthenticationModuleを使用してクレームを保持しているため、ログオフ後、ユーザーはCookie内の既存のFedAutによりアプリを使用できます。

0
Alex

過去数日間、Microsoft Azureサンプルで同様の問題が発生しました。使用して解決:

    public IHttpActionResult Index()
    {
        HttpContext.Current.GetOwinContext().Authentication.SignOut(
            CookieAuthenticationDefaults.AuthenticationType, 
            OpenIdConnectAuthenticationDefaults.AuthenticationType);
        return Ok();
    }
0
uron83
 AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
 FormsAuthentication.SignOut();
 Session.Abandon();
0
Prince Prasad

ASP .Net MVCログアウトが機能しない:-

プロダクションモードでIISでホストされているアプリがChromeで正しく機能しないという問題がありました

ただし、すべてのブラウザでVisual Studio Devホスティングを使用して-IEを介してプロダクションモードで動作していました

Startup.Auth.CSで問題が発生しました。次のことのために、重複した構成が存在しないことを確認してください

 app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
 app.UseCookieAuthentication((new CookieAuthenticationOptions(.....))
0
purvin