Cómo implementar la autenticación de cookies en ASP.NET Core
En este artículo, aprenderás a implementar la autenticación de cookies en ASP.NET Core sin utilizar la identidad. Intentaré cubrir cada paso para que los principiantes puedan entenderlo fácilmente.
Autenticación
Este artículo es parte de la serie de aprendizaje donde estoy desarrollando el Sistema de Inventarios con ASP.NET Core. Si eres nuevo en ASP.NET Core, te recomiendo que consulte los videos anteriores de esta serie,
- Diseño de la base de datos del Sistema de Inventarios con ASP.net CORE
- Estructura de Proyectos del Sistema de Inventarios
- Crear el modelo ASP.NET Core del Sistema de Inventarios
- Consultar la base de datos SQL del sistema de inventarios con ASP.NET Core
- Diseño del Login del Sistema de Inventarios con ASP.NET Core
La autenticación es el proceso de verificar la identidad del usuario. En este artículo, autenticaremos al usuario verificando las credenciales del usuario.
Implementemos la autenticación de cookies en ASP.NET Core paso a paso
Abre el proyecto del sistema de inventarios en el Visual Studio
Como hemos creado el proyecto del Sistema de Inventarios, debes abrir el archivo Program.cs y asegúrate que exista el código siguiente, de lo contrario agrégalo:
builder.Services.AddControllersWithViews();
Posteriormente, crea un servicio de middleware de autenticación con el método AddAuthentication y AddCookie. El esquema de autenticación pasado a AddAuthentication establece el esquema de autenticación predeterminado para la aplicación. CookieAuthenticationDefaults.AuthenticationScheme proporciona "Cookies" para el esquema. En el método de extensión AddCookie, debes establecer la propiedad LoginPath de CookieAuthenticationOptions en "/cuenta/inicio de sesión". La clase CookieAuthenticationOptions se usa para configurar las opciones del proveedor de autenticación.
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
// Specify where to redirect un-authenticated users
options.LoginPath = "/login";
// Specify the name of the auth cookie.
// ASP.NET picks a dumb name by default.
options.Cookie.Name = "inventcookie";
});
Por último, en el archivo Program.cs agregas UseAuthentication y UseAuthorization, como se muestra a continuación:
app.UseAuthentication();
app.UseAuthorization();
Ahora agrega el atributo Authorize en los controles que quieras proteger con autenticación, como se muestra a continuación en el HomeController
using EstradaWebGroup.SysInventarios.Web.Context;
using EstradaWebGroup.SysInventarios.Web.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
namespace EstradaWebGroup.SysInventarios.Web.Controllers
{
[Authorize]
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
protected readonly InventariosDbContext dbContext;
public HomeController(ILogger<HomeController> logger, InventariosDbContext _dbContext)
{
_logger = logger;
dbContext= _dbContext;
}
public IActionResult Index()
{
int totReg = dbContext.Usuarios.Count();
return View();
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
Código completo de Program.cs
using EstradaWebGroup.SysInventarios.Web.Context;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllersWithViews();
ConfigurationManager configuration = builder.Configuration;
var cnn = configuration.GetConnectionString("invdbconn");
builder.Services.AddDbContext<InventariosDbContext>(options => options.UseSqlServer(cnn));
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
// Specify where to redirect un-authenticated users
options.LoginPath = "/login";
// Specify the name of the auth cookie.
// ASP.NET picks a dumb name by default.
options.Cookie.Name = "inventcookie";
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Con esto la aplicación redirige al Login y esta lista para implementar la autenticación.