Asp.Net Core - простая аутентификация форм


12 принят

Это не так просто :)

  1. В Startup.cs настройте метод.

    app.UseCookieAuthentication(options =>
    {
      options.AutomaticAuthenticate = true;
      options.AutomaticChallenge = true;
      options.LoginPath = "/Home/Login";
    });
  2. Добавьте атрибут Authorize для защиты ресурсов, которые вы хотите защитить.

    [Authorize]
    public IActionResult Index()
    {
      return View();
    }
  3. В методе «Домашний контроллер», «Завершить отправку», напишите следующий метод.

    var username = Configuration["username"];
    var password = Configuration["password"];
    if (authUser.Username == username && authUser.Password == password)
    {
      var identity = new ClaimsIdentity(claims, 
          CookieAuthenticationDefaults.AuthenticationScheme);
    
      HttpContext.Authentication.SignInAsync(
        CookieAuthenticationDefaults.AuthenticationScheme,
        new ClaimsPrincipal(identity));
    
      return Redirect("~/Home/Index");
    }
    else
    {
      ModelState.AddModelError("","Login failed. Please check Username and/or password");
    }

Вот репозиторий github для справки: https://github.com/anuraj/CookieAuthMVCSample


0

Проведя часы, пытаясь следовать «новой» парадигме идентичности в .Net ... Слава богу, все еще существует «старый» класс System.Web.Security. Мне кажется, что использование инъекции зависимостей сводит на нет способность устанавливать простые точки останова. Или я что-то упускаю.


0

Чтобы добавить к ответу Анураджа - ряд классов устарел для .Net Core 2. FYI:

Startup.cs - В ConfigureServices:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(o => o.LoginPath = new PathString("/account/login"));

Startup.cs - В настройке:

app.UseAuthentication();

В вашем аккаунте / методе контроллера входа / везде, где вы выполняете аутентификацию:

var claims = new[] { new Claim(ClaimTypes.Name, "MyUserNameOrID"),
    new Claim(ClaimTypes.Role, "SomeRoleName") };

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

await context.SignInAsync(
    CookieAuthenticationDefaults.AuthenticationScheme, 
    new ClaimsPrincipal(identity));
// Do your redirect here

Источники: https://github.com/aspnet/Announcements/issues/232

https://github.com/aspnet/Security/issues/1310

C #, asp.net-MVC, asp.net-жильный, формы аутентификации,

c#,asp.net-mvc,asp.net-core,forms-authentication,

7

Ответов: 3


12 принят

Это не так просто :)

  1. В Startup.cs настройте метод.

    app.UseCookieAuthentication(options =>
    {
      options.AutomaticAuthenticate = true;
      options.AutomaticChallenge = true;
      options.LoginPath = "/Home/Login";
    });
  2. Добавьте атрибут Authorize для защиты ресурсов, которые вы хотите защитить.

    [Authorize]
    public IActionResult Index()
    {
      return View();
    }
  3. В методе «Домашний контроллер», «Завершить отправку», напишите следующий метод.

    var username = Configuration["username"];
    var password = Configuration["password"];
    if (authUser.Username == username && authUser.Password == password)
    {
      var identity = new ClaimsIdentity(claims, 
          CookieAuthenticationDefaults.AuthenticationScheme);
    
      HttpContext.Authentication.SignInAsync(
        CookieAuthenticationDefaults.AuthenticationScheme,
        new ClaimsPrincipal(identity));
    
      return Redirect("~/Home/Index");
    }
    else
    {
      ModelState.AddModelError("","Login failed. Please check Username and/or password");
    }

Вот репозиторий github для справки: https://github.com/anuraj/CookieAuthMVCSample


0

Проведя часы, пытаясь следовать «новой» парадигме идентичности в .Net ... Слава богу, все еще существует «старый» класс System.Web.Security. Мне кажется, что использование инъекции зависимостей сводит на нет способность устанавливать простые точки останова. Или я что-то упускаю.


0

Чтобы добавить к ответу Анураджа - ряд классов устарел для .Net Core 2. FYI:

Startup.cs - В ConfigureServices:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(o => o.LoginPath = new PathString("/account/login"));

Startup.cs - В настройке:

app.UseAuthentication();

В вашем аккаунте / методе контроллера входа / везде, где вы выполняете аутентификацию:

var claims = new[] { new Claim(ClaimTypes.Name, "MyUserNameOrID"),
    new Claim(ClaimTypes.Role, "SomeRoleName") };

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

await context.SignInAsync(
    CookieAuthenticationDefaults.AuthenticationScheme, 
    new ClaimsPrincipal(identity));
// Do your redirect here

Источники: https://github.com/aspnet/Announcements/issues/232

https://github.com/aspnet/Security/issues/1310

C #, asp.net-MVC, asp.net-жильный, формы аутентификации,
Похожие вопросы