2016-04-06 4 views
6

Ich benutze Strava als externen Login-Anbieter (ich nehme an, dass dies nicht mit Strava zu tun hat, könnte auch Google oder Facebook sein) Nach ein paar Stunden laufen/Tage oder sogar Wochen GetExternalLoginInfoAsync gibt null zurück. Ich habe eine Reihe anderer Fragen mit dem gleichen Problem gelesen, aber keine Lösung gefunden. Ich poste meine gesamte ConfigureAuth-Methode, nur für den Fall, dass ich mit der Bestellung etwas falsch gemacht habe.GetExternalLoginInfoAsync() loginInfo gibt null zurück - aber erst nach ein paar Stunden

Wenn Sie ein strava Konto haben könnten Sie wahrscheinlich das Problem hier erleben: fartslek.no/Account/Login

public void ConfigureAuth(IAppBuilder app) 
    { 
     // Configure the db context, user manager and signin manager to use a single instance per request 
     app.CreatePerOwinContext(ApplicationDbContext.Create); 
     app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
     app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); 

     // Enable the application to use a cookie to store information for the signed in user 
     // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
     // Configure the sign in cookie 
     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Account/Login"), 
      Provider = new CookieAuthenticationProvider 
      { 
       // Enables the application to validate the security stamp when the user logs in. 
       // This is a security feature which is used when you change a password or add an external login to your account. 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(30), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
      }, 
      CookieManager = new SystemWebCookieManager() 
     });    
     app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

     app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); 

     app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); 


     app.UseStravaAuthentication(new StravaAuthenticationOptions{ 
       ClientId="XXX", 
       ClientSecret= "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 

     }); 
    } 

ich diesen https://github.com/Johnny2Shoes/Owin.Security.Strava bin mit StravaAuth zu bekommen.

Wenn es aufhört zu arbeiten, ist ein Azure-Reset nicht genug, aber wenn ich einen neuen Einsatz mache, funktioniert alles eine Weile.

Ich verwende Owin 3.0.1 und 5.2.3 Mvc

+0

Ich frage mich, ob der Code schlechte Auth-Daten auf der Festplatte irgendwo zwischenspeichert. Wenn Sie Ihre Site erneut bereitstellen, werden alle Dateien auf der Festplatte gelöscht und durch die neuen ersetzt, was erklären würde, warum die Authentifizierung nachher zu funktionieren beginnt, während das einfache Zurücksetzen der Site nichts bewirkt –

+0

Interessante Theorie. Irgendwelche Ideen was zu überprüfen? – Larsi

+0

@ZainRizvi Danke, dass du dir das angeschaut hast. Es ist eine einfache mvc-Site mit der Standardimplementierung der Authentifizierung, die einzige Änderung, die ich gemacht habe, ist Strava als externen Authentifizierungsanbieter hinzuzufügen. Ich wäre wirklich glücklich, wenn Sie mir helfen könnten, herauszufinden, was das Problem ist. Nochmals vielen Dank für Ihre Zeit. – Larsi

Antwort

8

hatte ich das gleiche Problem. Nachdem ich etwas gegoogelt habe, habe ich entdeckt, dass dies ein bekannter Bug in Owin ist, wegen der Art, wie sie mit Cookies umgehen.

This issue wurde an Katana Team eingereicht, aber es sieht aus, sie werden es überhaupt nicht beheben. Es gibt viele Abhilfen für diese, aber das war die einfachste ich finden konnte:

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult ExternalLogin(string provider, string returnUrl) 
    { 
     ControllerContext.HttpContext.Session.RemoveAll(); 

     // Request a redirect to the external login provider 
     return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl })); 
    } 

Siehe this Frage, um weitere Informationen über diesen Fehler, und lassen Sie mich wissen, ob dies für Sie gut funktioniert.

+1

Danke, ich habe es einfach in der Produktion - ich werde Sie wissen lassen, ob es in ein paar Wochen funktioniert – Larsi

+2

https://xkcd.com/979/ – oflahero

+0

@spudnick haha. Danke für die Erinnerung. Es hat die letzten 3 Monate gut funktioniert. Überhaupt keine Probleme! – Larsi

Verwandte Themen