9.5.1 Seguridad basada en claims
Puedes crear tus restricciones personalizadas, agregando claims los cuales son atributos adicionales para por ejemplo validar que:
Solamente los vendedores que tengan categorías pueden ver la lista de productos.
Si tienes vendedores con permisos de solo lectura y vendedores con permisos de lectura y escritura.
Que tus servicios los vean solo personas con una edad de entre 18 y 21 años.
Puedes agregar claims a tu token y en cada servicio validar que según el claim se cumpla con la condición.
Seguridad basada en claims
Para el caso 1, en el login puedes agregar un claim con la clave Categorias y el valor que cuente el número total de categorías. Solamente los usuarios con el rol vendedor que tengan categorías asignadas son los que tendrían este rol.
En tus servicios para validar que solo los empleados con categorías pueden acceder al servicio.
En nuestro archivo Startup en el método ConfigureServices agregamos una nueva regla, le damos un nombre e indicamos que el servicio necesitará tener registrado un claim llamado Categorías (RequireClaim)
En nuestra carpeta Models agregamos nuestro Archivo UsuarioCategoria
Agregamos las llaves foráneas e índices en nuestra carpeta EntityConfigurations
Agregamos el modelo y las llaves foráneas a nuestro archivo CaducaContext
Actualizamos nuestra base de datos
Cambiamos nuestro método LoginAsync para regresar el total de categorías a las que tiene acceso cada usuario.
En el código donde agregamos como claims los roles, verificamos si el rol es "Vendedor", revisamos cuántas categorías tiene asignadas si tiene al menos una categoría agregamos el claim.
Agregamos a nuestros servicios de Productos que también el usuario Vendedor puede acceder a los servicios.
Agregamos también que el método para ObtenerProductos, debe cumplir con la política de que solo los vendedores con Categorías pueden acceder al servicio
Una desventaja de este tipo de política es que si un usuario inicia sesión y no tenía categorías asignadas y después se le asignan, el usuario debe volver a iniciar sesión
Para el ejemplo 2 de que se tengan usuarios con permisos de lectura, y permisos de lectura y escritura es similar al de las categorías. Puedes realizar el ejemplo para practicar, los pasos son:
Crea una tabla Permisos con los campos: Id(int), Clave (int), Nombre(varchar(100))
Guardar los permisos 1 Lectura, 2 Lectura y Escritura en el archivo CaducaContext
Crea una tabla UsuariosPermisos con los campos UsuarioId (int), PermisoId(int) donde registras los permisos que tiene cada usuario
Crea las llaves foráneas e índices
Agrega las clase del modelo y llaves foráneas a tu archivo CaducaContext
Genera la migración y actualiza la base de datos
Crea una clase UsuariosPermisosDAO con un método obtenerPermisosUsuario, donde regreses los permiso del usuario
En el método LoginAsync agrega como claims los permisos del usuario
Para el ejemplo 3,c puedes agregar un campo de fecha de nacimiento a los usuarios y en método login regresar la edad como claim
Agregar el campo fecha de nacimiento de tipo Date a la tabla usuarios
Agregar la migración
Actualizar la base de datos
Agregar la edad en el login en un claim llamado Edad
Crear una nueva política
6. Agregar la policy al método
Puedes ver la documentación oficial aquí
Last updated