2016-06-08 8 views
2

verwende ich Cookie-Authentifizierung mit Google mit folgenden Optionen:ASP.NET-Core Web Application ExpireTimeSpan in UseCookieAuthentication funktioniert nicht

 app.UseCookieAuthentication(new CookieAuthenticationOptions() 
     { 
      AuthenticationScheme = "MyCookieMiddlewareInstance", 
      LoginPath = new PathString("/Account/Login/"), 
      AccessDeniedPath = new PathString("/Account/Forbidden/"), 
      AutomaticAuthenticate = true, 
      AutomaticChallenge = true, 
      ExpireTimeSpan = TimeSpan.FromDays(14.0) 
     }); 

     app.UseGoogleAuthentication(new GoogleOptions() 
     { 
      SignInScheme = "MyCookieMiddlewareInstance", 
      AutomaticAuthenticate = true, 
      ClientId = "xxx", 
      ClientSecret = "xxx" 
     } 

    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public IActionResult ExternalLogin(string provider, string returnUrl = null) 
    { 
     // Request a redirect to the external login provider. 
     var redirectUrl = Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }); 
     var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl); 
     return Challenge(properties, provider); 
    } 

    [HttpGet] 
    [AllowAnonymous] 
    public IActionResult ExternalLoginCallback(string returnUrl = null, string remoteError = null) 
    { 
     return RedirectToLocal(returnUrl); 
    } 

Nach der Autorisierung über Google Cookies nach 30 Minuten abgelaufen sein. Und sie sind für die Sitzung erstellt.

enter image description here

Was soll ich tun exparation Zeit zu erhöhen?

Antwort

2

Sie sollten Ihre eigene Cookies-Middleware nicht verwenden, wenn Sie ASP.NET Core Identity verwenden, da app.UseIdentity() dies bereits für Sie erledigt. Sie können die Cookie-Lebensdauer/den Namen/Pfad direkt in den Identitätsoptionen konfigurieren, wenn Sie services.AddIdentity(options => { ...} aufrufen.

Wenn Sie nicht _signInManager.ExternalLoginSignInAsync mit isPersistent: true anrufen, erhalten Sie einen Session-Cookie, der beim Schließen des Browsers abläuft. Sie können Ihre ExternalLoginCallback aktualisieren, um das zu beheben:

[HttpGet] 
[AllowAnonymous] 
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null) 
{ 
    if (remoteError != null) 
    { 
     ModelState.AddModelError(string.Empty, $"Error from external provider: {remoteError}"); 
     return View(nameof(Login)); 
    } 
    var info = await _signInManager.GetExternalLoginInfoAsync(); 
    if (info == null) 
    { 
     return RedirectToAction(nameof(Login)); 
    } 

    // Sign in the user with this external login provider if the user already has a login. 
    // Specify isPersistent: true to avoid getting a session cookie. 
    var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: true); 
    if (result.Succeeded) 
    { 
     // Update any authentication tokens if login succeeded 
     await _signInManager.UpdateExternalAuthenticationTokensAsync(info); 

     _logger.LogInformation(5, "User logged in with {Name} provider.", info.LoginProvider); 
     return RedirectToLocal(returnUrl); 
    } 
    if (result.RequiresTwoFactor) 
    { 
     return RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl }); 
    } 
    if (result.IsLockedOut) 
    { 
     return View("Lockout"); 
    } 
    else 
    { 
     // If the user does not have an account, then ask the user to create an account. 
     ViewData["ReturnUrl"] = returnUrl; 
     ViewData["LoginProvider"] = info.LoginProvider; 
     var email = info.Principal.FindFirstValue(ClaimTypes.Email); 
     return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = email }); 
    } 
} 
+0

Vielen Dank für Ihre Antwort! Ich habe app.UseIdentity(); to Startup.cs, aber jetzt warten _signInManager.GetExternalLoginInfoAsync(); ist immer null und es leitet mich auf die Anmeldeseite um, wenn ich in der App autorisiert habe. Ich habe versucht, dieses Problem zu suchen, aber ich habe keine Lösung gefunden. –

+0

Ich löse dieses Problem, um app.UseCookieAuthentication in Startup.cs zu kommentieren Jetzt habe ich die Ausnahme in erwarten _signInManager.ExternalLoginSignInAsync "Kein Datenbank-Provider wurde für diesen DbContext konfiguriert". Ich habe services.AddDbContext (); und. AddEntityFrameworkStores (); in Startup und kann sie nicht loswerden, weil die Anwendung ohne sie nicht funktioniert. –

+0

Am Ende habe ich app.UseIdentity() entfernt; von StartUp und hinzugefügt erwarten HttpContext.Authentication.SignInAsync ("MyCookieMiddlewareInstance", Benutzer, Eigenschaften); zu ExternalLoginCallback wie folgt: [http://i.imgur.com/fpLiiGS.png](http://i.imgur.com/fpLiiGS.png] Es funktioniert für mich. –

Verwandte Themen