OAuthWebSecurity Formsauthentication不会清除会话mvc4

时间:2014-02-13 07:08:36

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

我们是一个MVC4应用程序。 我们是OAuth& Formsauthentication允许登录google,facebook&鸣叫声。

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

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

    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

但没有答案!!

1 个答案:

答案 0 :(得分:2)

乍一看,你描述的问题似乎没有任何问题。你的解决方案似乎工作正常。在我看来,你并不了解OAuth,FormsAuthenticate,Sessions和Cookies如何完全适合。为简单起见,我将概述您描述的流程并解释每个流程......

情况是您既没有登录您的网站,也没有登录您的Google帐户。

  1. 您浏览到您的网站登录页面
  2. 点击“使用Google登录”按钮:这会将您重定向到Google帐户登录对话框,因此您不再在您的网站上了...您现在正在敲开Goog​​le的大门
  3. 您已成功通过Google登录:Google将发出Cookie(仅限Google服务)
  4. 到目前为止,您的浏览器拥有一个Cookie ... Google的一个

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

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

    5.接下来,您退出网站:此操作会破坏与您的网站相关的任何会话(包括您网站的Cookie)。请注意,Google的Cookie仍然有效,事实上,如果您转到gmail,youtube或任何其他Google服务,您将完全绕过身份验证,因为您尚未从Google退出...仅限于您的网站。

    6.然后您点击“使用Google登录”按钮重新登录您的网站:此操作会将您带到Google,但是,由于Google检测到您已经过身份验证(已登录),因此不需要要重新验证您,它已经知道您是谁并且没有提示登录对话框,而是将您重定向回您的网站,发布一个全新的访问令牌。

    基本上,如果您已登录

    ,则无需再次使用Google登录

    希望它有意义