2017-09-01 1 views
0

Ich möchte die Autorisierung in der Anwendung ASP.NET Core 2 bereitstellen. Nach dem Senden des Modells mit den Daten in Konto/Login nach dem Aufruf von "abwarten Authentifizieren (Benutzer) "Ich erhalte eine Fehlermeldung. Ich kann nicht verstehen, wo es Mangel an Beschreibung gibt.AS.NET Core 2 Es ist kein Authentifizierungshandler für das Schema konfiguriert.

Startup.cs

 //ConfigureServices 
     services.AddAuthentication(options => 
     { 
      options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
      options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
      options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; 

     }).AddCookie("TmiginScheme", options => 
     { 
      options.LoginPath = "/Account/Login"; 
      options.LogoutPath = "/Account/Logout"; 
      options.ExpireTimeSpan = TimeSpan.FromHours(1); 
      options.SlidingExpiration = true; 
     }); 

     //Configure 
     app.UseAuthentication(); 

Account

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> Login(LoginModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      User user = null; 
      Cryptex cryptex = new Cryptex(); 
      string password = cryptex.EncryptText(model.Password, "TMigin"); 

      // Ищем user 
      user = fStorage.Users.GetUserByLogin(model.Login); 
      if (user != null) 
      { 
       if (string.Compare(user.Password, password) != 0) 
       { 
        user = null; 
       } 
      } 

      if (user != null) 
      { 
       await Authenticate(user); 

       return RedirectToAction("Index", "CMS"); 
      } 
      else 
      { 
       // Логируем ошибку входа 
       ModelState.AddModelError("", "Ошибка входа"); 
      } 
     } 

     return View(model); 
    } 

    private async Task Authenticate(User user) 
    { 
     var claims = new List<Claim> 
       { 
        new Claim(ClaimsIdentity.DefaultNameClaimType, user.Name), 
        new Claim("CMS", "True") 
       }; 
     var identity = new ClaimsIdentity(claims); 
     var principal = new ClaimsPrincipal(identity); 
     await HttpContext.Authentication.SignInAsync("TmiginScheme", principal); 
    } 

Fest

nicht berufstätig, wie ich den Code nach dem app.UseMvc platziert (...) {}. Im Screenshot der korrekte Standort. correctly

Antwort

1

Ich denke, das Problem ist, dass Sie das Standardschema konfigurieren Cookies zu sein, wenn Sie options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; verwendet und als Sie verschiedenes Schema verwendet, die TmiginScheme ist, wenn Sie AddCookie("TmiginScheme" verwendet.

Als AccountController haben Sie ClaimsIdentity neu erstellt, ohne den Authentifizierungstyp anzugeben, und Sie haben schließlich versucht, sich mit einem anderen als dem in angegebenen Schema-Namen anzumelden.

Um Ihr Problem zu lösen, ändern Sie AddCookie("TmiginScheme" zu .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme.

Änderung var identity = new ClaimsIdentity(claims); zu var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);.

Schließlich ändern await HttpContext.Authentication.SignInAsync("TmiginScheme", principal);-await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);

3

ich hatte das gleiche Problem, aber Lösung des Autors nicht für mich arbeiten. Ich habe von .NET Core 1.1 zu .NET Core 2.0 migriert.

In meinem Fall war ich mit:

await HttpContext.Authentication.SignInAsync(...); 
await HttpContext.Authentication.SignOutAsync(...); 

und i verwenden sollten:

await HttpContext.SignInAsync(...); 
await HttpContext.SignOutAsync(...); 
+0

Sie sind ein Lebensretter. Ich habe Sachen für eine solide 8+ Stunden probiert, und dies stellte sich als die Lösung heraus. –

Verwandte Themen