2010-11-19 24 views
9

Tengo una biblioteca de clases que contiene mi capa de acceso a la base de datos, y la uso en todos mis proyectos que funcionan con este DB, ahora quiero integrar seguridad en esta biblioteca para poder devolver datos diferentes para diferentes roles de seguridad. ¿Cuál es la mejor manera de lograr esto con la seguridad incorporada de .NET? Estaba pensando acerca del uso de System.Security.Permissions.PrincipalPermission pero no puedo ver cómo me puede ayudar, ya que cualquier persona que utilice mi biblioteca puede escribir aplicaciones cliente como estoC# Seguridad basada en roles

GenericIdentity genericIdentity = new GenericIdentity("User"); 
GenericPrincipal genericPrincipal = new GenericPrincipal(genericIdentity, new[] { "Administrator" }); 
Thread.CurrentPrincipal = genericPrincipal; 

Y pasaré toda mi permiso del director exige

PrincipalPermission principalPermission = new PrincipalPermission(null, "Administrator"); 
principalPermission.Demand(); 

sin siquiera autenticación. O no entiendo este modelo de seguridad, o simplemente no asegura nada.

+0

Leyendo mi propia pregunta después de 2 años, qué pregunta tan estúpida -) –

Respuesta

5

La seguridad basada en roles está pensada para que el código de la biblioteca consuma el modelo de seguridad elegido del cliente sin necesidad de conocer la implementación; la clave aquí es que ya se encuentra en un punto en el que es razonable confiar en el modelo de seguridad del cliente, y solo desea ofrecer opciones adecuadas en función de las decisiones tomadas por el cliente (por ejemplo, como parte de un proceso de inicio de sesión).

Si no lo hace la confianza del cliente, todas las apuestas están apagadas todos modos, ya que sólo podían utilizar la reflexión para extraer sus componentes internos a los fragmentos. En ese escenario, sería mejor mantener ese código de implementación en privado, por ejemplo, a través de un servicio web que acepte las credenciales del usuario de alguna manera. Entonces solo pueden ser cuentas para las que tengan las credenciales.

+0

Tiene razón, y en realidad los clientes de software (aplicaciones que usan esta biblioteca) son de confianza, los escribí yo mismo, pero tengo muchos interfaces para esta biblioteca (servicio) como WEB, WCF, Desktop, y quiero que toda mi autenticación esté en esta biblioteca. –

+0

@BrokenPipe - ¿entonces quizás podría afirmar por separado que el permiso debe ser de una implementación concreta dada? (con 'es')? (que solo puede emitir su código) –

+0

¿Valida todo en una tienda de seguridad como Active Directory? ... ¿o AD y SQL Server? –

0
public class Example 
{ 

    // Will enforce that the user have the administrator role 
    [PrincipalPermission(XXXX, Role="Administrator")] 
    public void Remove(int userId) 
    { 
    } 

    public void Add(int userId) 
    { 
    if (!Thread.CurrentPrincipal.IsInRole("User")) 
     throw new UnauthorizedAccessException("Only registered users may add users"); 
    } 

} 

Cómo está configurada la configuración real de la principal/identidad depende del usuario de su biblioteca.

Cuestiones relacionadas