Pregunta

estoy poniendo en práctica una costumbre BCS Modelo para obtener datos de un sistema de fondo. A medida que los usos de back-end que es propia de gestión de usuarios, estoy acceder a él a través de una cuenta de servicio.

Todo esto funciona bien y me permite tirar de datos en SharePoint. Sin embargo, ya se canaliza a través de la cuenta de servicio, todo el mundo puede acceder a ella, lo cual es malo.

¿alguien puede darme algunos consejos de qué método aplicar? El backend no me da NT ACL, pero me pregunto si pudiera simplemente "falso" de alguna manera? (Esencialmente diciendo "Este grupo NT tiene acceso de lectura" es lo suficientemente bueno).

Soy consciente de ISecurityTrimmer2 de resultados de búsqueda, pero lo ideal es que quiero a la seguridad interior de la cubierta del modelo BCS para que se aplique a las listas externas. Quiero evitar el uso de un almacenamiento seguro y el mapeo de cada usuario individual al backend.

¿Fue útil?

Solución

aquí . Puedo establecer un campo en el modelo BCS ser el WindowsSecurityDescriptorField y luego puedo utilizar código personalizado en mis métodos de BCS para crear una ACL:

Byte[] GetSecurityDescriptor(string domain, string username)
{
    NTAccount acc = new NTAccount(domain, username);
    var sid = (SecurityIdentifier)acc.Translate(typeof(SecurityIdentifier));
    CommonSecurityDescriptor sd = new CommonSecurityDescriptor(false, false,
        ControlFlags.None,sid,null, null, null);
    sd.SetDiscretionaryAclProtection(true, false);

    //Deny access to everyone
    SecurityIdentifier everyone = new SecurityIdentifier(
        WellKnownSidType.WorldSid, null);
    sd.DiscretionaryAcl.RemoveAccess(AccessControlType.Allow, everyone, 
      unchecked((int)0xffffffffL), InheritanceFlags.None, PropagationFlags.None);

    //Grant full access to specified user
    sd.DiscretionaryAcl.AddAccess(AccessControlType.Allow, sid,
      unchecked((int)0xffffffffL), InheritanceFlags.None, PropagationFlags.None);

    byte[] secDes = new Byte[sd.BinaryLength];
    sd.GetBinaryForm(secDes, 0);

    return secDes;
}

Esto funciona bien y me permite crear ACL personalizados una vez traduje usuarios entre el sistema de fondo y Active Directory.

Todavía estoy interesado en saber si alguien tiene otra manera si tener la seguridad como parte del modelo BCS.

Otros consejos

Si se quiere evitar el almacenamiento seguro, suena como su única opción es PassThrough. El problema es que no se puede utilizar NTLM. Debe utilizar Kerberos NTLM porque no permite la delegación de identidad ya que está de paso credenciales del usuario al servidor de SharePoint para el sistema externo. En el uso de Kerberos para la delegación de identidad, es necesario crear un SPN (nombre principal de servicio) para su servicio para que AD sabe que está permitido delegar identidades.

Autenticación en su Sistema externo

Creación de nombres principales de las aplicaciones web con autenticación Kerberos en este artículo para crear un SPN.

Estoy usando un enfoque algo diferente. Si el código .NET objetos para recuperar los datos desde el sistema externo, se puede acceder al objeto SPContext para comprobar en qué sitio estés en, o qué usuario está consultando los datos. En el código, puede utilizar esa información para filtrar los datos de cualquier lo que te gusta.

Así que la misma instancia exacta de una lista externa en su sitio de SharePoint podría volver 5 resultados para el uso A, pero 10 resultados para el usuario B en base a nombre de usuario o tal vez pertenencia al grupo. No es tan difícil de poner en práctica y en realidad funciona bastante bien.

http://jsiegmund.wordpress.com/2010/05/19/creating-secured-bcs-objects-with-bcs-meta-man/ .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top