Tengo una capa de lógica de negocios (el "repositorio") que se expone como un conjunto de interfaces .NET respaldadas por implementaciones concretas intercambiables. Originalmente tenía esta capa empresarial implementar autenticación y autorización (authn/authz), lo que significaba que tenía interfaces como IUserIdentity e IUserRole, y todos los métodos que accedían a datos confidenciales tomaban IUserIdentity y realizaban la autorización antes de permitir la acción.¿Debería la capa de lógica de negocios implementar la autorización y autenticación?
La capa de negocio ha sido muy independiente antes de este punto ... pero ahora, cuando intento integrarme en un sitio web ASP.NET, me doy cuenta de que ASP.NET tiene una autenticación/autorización enriquecida sistema integrado en él a través de las API de Membresía y Función.
Entonces, la pregunta es, ¿debería eliminar todos los authn/authz de la capa de lógica de negocios y confiar en la interfaz web para hacer esto? Esto simplificaría mucho las cosas, pero no sé si luego me arrepentiré de haberlo movido.
La alternativa es mantener el authn/authz en mi lógica comercial pero integrarlo con ASP.NET a través de proveedores de Membresía/Función personalizados. Sin embargo, esto parece bastante engorroso ... Todavía necesito investigar el costo de hacer esto.
¿Qué harías (o has hecho) y por qué?
En realidad (lo siento, debería haber mencionado esto) Estoy usando ASP.NET MVC, que implementa el concepto de aspecto para la seguridad a través del atributo Autorizar. – DSO
atributos en .NET son como anotaciones en Java EE, si no recuerdo mal. ¿Hay algo así como el lenguaje de expresión AspectJ para aplicar un aspecto a una gama de métodos, clases, paquetes? – duffymo