Asp.net mvc 在MVC5中使用OAuth时返回身份验证页面的无限循环

Asp.net mvc 在MVC5中使用OAuth时返回身份验证页面的无限循环,asp.net-mvc,oauth-2.0,google-oauth,asp.net-mvc-5,facebook-oauth,Asp.net Mvc,Oauth 2.0,Google Oauth,Asp.net Mvc 5,Facebook Oauth,我用MVC5和OAuth编写了一个利用Google/FacebookAuth的网页 有时候,我可以很好地使用Facebook或Google进行身份验证。它工作得很好 然而,经常发生的情况是: 导航到登录页面 选择谷歌或facebook 提供帐户信息,获得必要的重定向 重定向回登录页面,但未登录 我没有收到(或没有在正确的地方寻找)任何提示我的错误-我正在Azure上使用SSL进行托管 有人知道为什么它有时有效,有时无效吗?这感觉可能是一个cookie问题,或者可能是服务器端配置问题?我不明白为什

我用MVC5和OAuth编写了一个利用Google/FacebookAuth的网页

有时候,我可以很好地使用Facebook或Google进行身份验证。它工作得很好

然而,经常发生的情况是:

  • 导航到登录页面
  • 选择谷歌或facebook
  • 提供帐户信息,获得必要的重定向
  • 重定向回登录页面,但未登录 我没有收到(或没有在正确的地方寻找)任何提示我的错误-我正在Azure上使用SSL进行托管

    有人知道为什么它有时有效,有时无效吗?这感觉可能是一个cookie问题,或者可能是服务器端配置问题?我不明白为什么它有时有效,有时无效

    我试过:

    • 使用第二台机器,一台以前从未登录过的机器(用于规则 同样的问题
    • 清除我的cookie缓存,同样的问题
    我的配置方式:

    public void ConfigureAuth(IAppBuilder应用程序)
    {
    //使应用程序能够使用cookie存储登录用户的信息
    app.UseCookieAuthentication(新的CookieAuthenticationOptions
    {
    AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,
    LoginPath=新路径字符串(“/Account/Login”)
    });
    //使用cookie临时存储有关使用第三方登录提供程序登录的用户的信息
    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
    //取消注释以下行以启用使用第三方登录提供程序登录
    //app.UseMicrosoftAccountAuthentication(
    //客户ID:“,
    //客户机密:);
    //app.UseTwitterAuthentication(
    //消费市场:“,
    //消费者信用:”;
    app.UseFacebookAuthentication(
    appId:“abc”,
    appSecret:“123”);
    app.UseGoogleAuthentication();
    }
    

    我遵循本教程在MVC5中使用OAuth:

    这是一个主要问题,您的应用程序将随机进入无限循环,有时重新部署应用程序会使其工作,但只是暂时的。我发现解决这个问题的快速方法是使用@cooper评论的nuget包
    kentor.owincookiesaver
    。您应该在owin启动类中调用cookieauthentication之前调用该类,如下所示

    app.UseKentorOwinCookieSaver();
    
    app.UseCookieAuthentication(new CookieAuthenticationOptions());
    

    显然,owin和katana中存在一个漏洞,您的cookie刚刚消失,这将修复它。

    要解决此问题:您可以升级应用程序以使用ASP.NET Core。如果必须继续使用ASP.NET,请执行以下操作:

    将应用程序的Microsoft.Owin.Host.SystemWeb包更新为至少一个版本,并修改代码以使用一个新的cookie manager类,例如以下内容:


    我也有同样的问题。我有一个在azure上托管的站点,样板登录代码,90%的时间都能正常工作,其他时间都卡在循环中。在azure上重新启动站点,等待30秒,然后重新启动,效果很好。你找到解决方案了吗?这也是一个长期存在的问题。这似乎为我解决了问题:这个bug记录在哪里?这个解决方案在我的案例中有效,bug记录在这里:解决方法记录在这里:Kentor.OwinCookieSaver nuget包已下载95000次。
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
        AuthenticationType = "Cookies", 
        CookieManager = new Microsoft.Owin.Host.SystemWeb.SystemWebChunkingCookieManager() 
    });