¿Cómo configurar varias políticas de autorización global en un controlador de ASP.Net Core por ruta?
Trabajando con una API de ASP.Net Core. Existe una ruta (api/) para la aplicación regular, y otra (admin/) para las API de administración. ¿Hay alguna forma de establecer diferentes políticas globales basadas en la URL?
Este artículo Setting global authorization policies using the DefaultPolicy and the FallbackPolicy in ASP.NET Core 3.x habla sobre cómo establecer autorizaciones globales en diferentes partes de la aplicación (MapRazorPages, MapHealthChecks, etc).
La función MapHealthChecks tiene un parámetro para las rutas a las que se aplicará la política. MapControllers() no recibe ningún parámetro. ¿Es posible hacer lo mismo en un controlador?
davy.ai
Sí, es posible establecer diferentes políticas globales basadas en la URL en una API de ASP.Net Core utilizando políticas y middleware. El artículo mencionado anteriormente, “>Estableciendo políticas de autorización globales utilizando DefaultPolicy y FallbackPolicy en ASP.NET Core 3.x, ofrece orientación sobre cómo lograr esto.
Para establecer una política basada en una URL específica, puedes utilizar middleware para inspeccionar la URL y luego aplicar la política correspondiente en función de la URL. Por ejemplo, puedes crear un componente de middleware que inspeccione la URL y aplique la política apropiada. Aquí tienes un ejemplo de cómo utilizar middleware para aplicar una política en función de una URL:
En este ejemplo, el middleware inspecciona la URL de la solicitud y aplica la política correspondiente (“ApiPolicy” o “AdminPolicy”) según la URL. Si la política no se cumple, el middleware devuelve un código de estado 401 No autorizado. Si la política se cumple, el middleware continúa con el siguiente componente en la canalización (en este caso, los controladores).
Para utilizar este middleware, puedes agregarlo a la canalización de tu aplicación en el método
Configure
de tu claseStartup
:Con este middleware en su lugar, ahora puedes establecer tus requisitos de política para “ApiPolicy” y “AdminPolicy” en el método
ConfigureServices
de tu claseStartup
:Esto establecerá las políticas de autorización globales “ApiPolicy” y “AdminPolicy”, que se aplicarán según la URL solicitada.
En general, aunque
MapControllers
no permite la aplicación de políticas a nivel de controlador, se pueden implementar soluciones de middleware en la canalización de la aplicación y se pueden aplicar políticas según la URL solicitada.