【问题标题】:OAuthWebSecurity Formsauthentication is not clearing sessions mvc4OAuthWebSecurity Formsauthentication 未清除会话 mvc4
【发布时间】:2014-02-13 18:13:05
【问题描述】:

我们的应用程序是 MVC4 应用程序。 我们是 OAuth 和 Formsauthentication,允许使用 google、facebook 和 twitter 登录。

当我第一次使用谷歌登录时.. 我被重定向到谷歌页面,并且我提供了它登录的凭据,这一切都很好。

注销并重新登录后,我可以自动登录。 我认为浏览器中的cookies没有被清除,虽然我已经在注销时清除了它们。

    public ActionResult LogOff()
    {
        //Clears out Session
        Response.Cookies.Clear();

        //Signs out of WebSecurity and FormsAuthentication
        WebSecurity.Logout();
        FormsAuthentication.SignOut();

        // clear authentication cookie
        HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
        cookie1.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie1);

        Session.Clear();
        Session.Abandon();

        return RedirectToAction(AXN_DFLT, CNTLR_DFLT);
    }

注销后,我应该在重新登录时再次重定向到谷歌页面。 但它没有发生。 有人请指教吗?

这里有同样的问题:ASPXAUTH Session invalidate on logout with OAUTH

但没有答案!

【问题讨论】:

    标签: asp.net-mvc-4 session google-oauth


    【解决方案1】:

    乍一看,您描述的问题似乎没有任何问题。您的解决方案似乎运行良好。在我看来,您似乎不了解 OAuth、FormsAuthenticate、Sessions 和 Cookies 如何完全适合。为简单起见,我将概述您描述的流程并逐一解释...

    这种情况是您既没有登录您的网站也没有登录您的谷歌帐户。

    1. 您浏览到您的网站登录页面
    2. 点击“使用 Google 登录”按钮:这会将您重定向到 Google 帐户登录对话框,因此您不再在您的网站上...您现在正在敲 Google 的门
    3. 您已成功登录 Google:Google 将发出一个 cookie(仅用于 Google 的服务)

    到目前为止,您的浏览器拥有一个 cookie...Google 的一个

    4.您被重定向回您的网站:您的网站注意到谷歌发布的访问令牌(不是cookie),然后您的网站将发布自己的cookie,与谷歌的cookie无关

    到目前为止,您使用 Google 和您的网站登录,这意味着您的浏览器拥有 2 个有效的 cookie(Google 和您网站的)

    5. 稍后,您退出您的网站:此操作会破坏与您的网站相关的任何会话(包括您网站的 cookie)。请注意,Google 的 cookie 仍然有效,事实上,如果您访问您的 gmail、youtube 或任何其他 Google 服务,您将完全绕过身份验证,因为您还没有从 Google...仅从您的网站注销。

    6.然后您决定通过单击“使用 Google 登录”按钮重新登录您的网站:此操作会将您带到 Google 的网站,但是,因为 Google 检测到您已经通过身份验证(登录)它不需要为了重新对您进行身份验证,它已经知道您是谁,并且不会提示登录对话框,而是将您重定向回您的网站,并发出新的访问令牌。

    基本上,如果您已经登录,则无需再次使用 Google 登录

    希望有意义

    【讨论】:

    • 谢谢!!我明白这一点。但是如果我想用另一个帐户登录谷歌,我应该总是手动清除浏览器历史记录,这似乎不正确吗?注销应该清除所有会话不是吗?
    • 如果你想用另一个谷歌账户登录,那么问问自己如果你去GMail并且你想用另一个账户登录你会怎么做?您必须先注销,对吗?这和你在这里做的完全一样。我仍然认为您不了解 cookie 的工作原理。您必须退出 Google,因为您已使用 Google 登录。
    • 好的,我的用户使用google或twitter登录网站,如果他们想完成注销,他们应该去google并总是注销吗?
    • 是的,这正是我在回答中所说的。您是在暗示您的用户将共享同一台计算机和同一浏览器会话????
    猜你喜欢
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多