0Pricing
C# Academy · Lección

Autorización basada en roles

Restrinja endpoints según los roles de los usuarios.

Autorización basada en roles es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.

Autenticación frente a autorización

La autenticación responde a «¿quién es usted?». La autorización responde a «¿qué tiene permitido hacer?».

El modelo de autorización más sencillo en ASP.NET Core se basa en roles: un usuario pertenece a determinados roles y los endpoints exigen roles específicos.

// User has roles: admin, editor
// Endpoint requires: admin

De dónde proceden los roles

Un rol no es más que un claim de tipo ClaimTypes.Role. Al emitir un JWT, añada un claim de rol por cada rol que tenga el usuario.

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
    new Claim(ClaimTypes.Role, "admin"),
    new Claim(ClaimTypes.Role, "editor")
};

El tipo de claim de rol

Para que funcionen [Authorize(Roles=...)] y User.IsInRole, el handler debe saber qué tipo de claim representa un rol.

De forma predeterminada, la clave JWT role se asigna a ClaimTypes.Role. Si utiliza una clave personalizada, indíqueselo al validador mediante RoleClaimType.

options.TokenValidationParameters = new TokenValidationParameters
{
    RoleClaimType = ClaimTypes.Role
};

Exigir un único rol

Aplique [Authorize(Roles = "admin")] a un controlador o una acción. Solo los usuarios con el rol admin pueden acceder.

[Authorize(Roles = "admin")]
[HttpDelete("users/{id}")]
public IActionResult DeleteUser(int id)
{
    // only admins reach here
    return NoContent();
}

Exigir cualquiera de varios roles

Una lista separada por comas significa OR: el usuario necesita al menos uno de los roles indicados.

[Authorize(Roles = "admin,editor")]
[HttpPut("articles/{id}")]
public IActionResult Update(int id) => Ok();
// admins OR editors are allowed

Exigir varios roles (AND)

Para exigir todos los roles de un conjunto, apile varios atributos [Authorize]. Todos ellos deben cumplirse.

[Authorize(Roles = "employee")]
[Authorize(Roles = "manager")]
public IActionResult ApproveBudget() => Ok();
// must be BOTH employee AND manager

Comprobación de roles en el código

A veces necesita comprobar el rol dentro del cuerpo del método, no solo en la puerta de entrada. Use User.IsInRole.

public IActionResult GetReport()
{
    var data = BuildReport();
    if (User.IsInRole("admin"))
        data.IncludeSensitiveColumns();
    return Ok(data);
}

Equivalente con Minimal API

Las Minimal APIs usan .RequireAuthorization con una política insertada o, de forma más sencilla, puede exigir un rol mediante una política con nombre.

app.MapDelete("/users/{id}", (int id) => Results.NoContent())
   .RequireAuthorization(p => p.RequireRole("admin"));

Roles en una jerarquía

ASP.NET Core no tiene una jerarquía de roles integrada. Si los administradores deben tener implícitamente permisos de editor, conceda ambas notificaciones de rol al iniciar sesión o modelarlo mediante políticas (siguiente curso).

// Grant both at login if admin >= editor
new Claim(ClaimTypes.Role, "admin");
new Claim(ClaimTypes.Role, "editor");

Cuando los roles no bastan

Los roles son poco precisos. Cuando las reglas dependen de los datos (por ejemplo, «solo el propietario puede editar») o de permisos detallados, las comprobaciones de roles se vuelven difíciles de gestionar.

Ahí es donde entran en juego la autorización basada en claims y la autorización basada en políticas.

// Hard to express with roles alone:
// "editors, but only for their own department"

Devolver 403 frente a 401

Si el usuario no está autenticado, una comprobación de rol produce 401 Unauthorized. Si está autenticado, pero no tiene el rol, recibe 403 Forbidden.

// No/invalid token         -> 401 Unauthorized
// Valid token, wrong role   -> 403 Forbidden

Comprobación rápida

Compruebe sus conocimientos sobre los roles.

Resumen

Ha aprendido la autorización basada en roles:

  • Los roles son claims de ClaimTypes.Role incluidos en el token.
  • [Authorize(Roles = "a,b")] significa OR; combinar atributos equivale a AND.
  • User.IsInRole comprueba los roles en el código.
  • Los roles son poco precisos; las reglas basadas en datos necesitan modelos más completos.

Siguiente: autorización basada en claims.

Preguntas frecuentes

¿La lección «Autorización basada en roles» es gratis?

Sí — el texto completo de «Autorización basada en roles» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Autorización basada en roles»?

Restrinja endpoints según los roles de los usuarios. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Autorización basada en roles»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Autorización basada en roles
  2. Autorización basada en claims
  3. Autorización basada en políticas
  4. Requisitos de autorización personalizados
← Volver a C# Academy