Acceder a la información del usuario desde una confianza unidireccional

Tengo dos dominios, el MÍO y el DE ELLOS. MINE es mi dominio local y tiene una confianza unidireccional con THEIRS (utilizando el puerto 636 de LDAPS), de modo que MINE confía en THEIRS pero THEIRS no confía en MINE. Puedo agregar usuarios de THEIRS a grupos en MINE, y hacer que los usuarios de THEIR inicien sesión en máquinas y aplicaciones en la red MINE. El fideicomiso parece estar funcionando correctamente.

Estoy escribiendo una pequeña aplicación .Net (no ASP.Net) para probar la conectividad a través de la WAN. Tenemos una aplicación que no ve usuarios de THEIRS en grupos en MINE. Otras aplicaciones, como SharePoint, funcionan bien.

Intenté usar la opción ASP.Net 4 con objetos System.DirectoryServices.AccountManagement, como PrincipalContext, UserPrincipal, GroupPrincipal, etc. Fragmento de código rápido

    PrincipalContext domainContext = GetDomainContext(DomainName, ConnectionPort,
        UseSpecifiedCredentials, Credentials);

    GroupPrincipal theGroup = GroupPrincipal.FindByIdentity(domainContext,
        IdentityType.SamAccountName, GroupName);

    PrincipalCollection theUsers = theGroup.Members;

    var users = from u in theUsers
                select u.Name;

    return users.ToArray();

Todo funciona GENIAL cuando me conecto directamente a MINE. El problema viene con la conexión a ELLOS. La confianza unidireccional del tráfico LDAPS está devolviendo el error:

System.DirectoryServices.Protocols.LdapException: The LDAP server is unavailable.

Así que cambio a las variaciones de .Net 2 usando DirectoryEntry, DirectorySearcher, etc. Esto realmente funciona contra EL dominio de ELLOS.

    List<string> userNames = new List<string>();
    string searchString = string.Format("(sAMAccountName={0})", GroupName);
    SearchResult result = SearchAD(DomainName, ConnectionPort, searchString);

Puedo conectarme directamente al dominio THEIRS, utilizando alguna suplantación en el código.

Cuando consulto los grupos en MINE, obtengo el SID de los usuarios de THEIRS, no una cuenta de usuario.

The following users are a member of testGroup:
CN=S-1-5-21-....,CN=ForeignSecurityPrincipals,DC=MINE,DC=local
CN=S-1-5-21-....,CN=ForeignSecurityPrincipals,DC=MINE,DC=local

También probé la suplantación en esto, ejecutándolo como un usuario de THEIRS pero sin suerte.

¿Cómo puedo obtener información de usuario de THEIRS cuando el usuario está en MINE? ¿Tengo que tomar el CN/SID anterior y consultar SU dominio? ¿Qué me estoy perdiendo en las cosas de .Net 4?

preguntado el 12 de junio de 12 a las 21:06

1 Respuestas

Supongo que tiene su máquina ASP.NET ejecutándose en MINE.

Su enfoque System.DirectoryServices.AccountManagement debería funcionar si se asegura de usar una cuenta de usuario de dominio de SU dominio para ejecutar la aplicación. En la configuración de confianza unidireccional normal (a menos que esté realizando una confianza de autenticación selectiva), la cuenta de usuario de dominio de SUS debe tener permisos para leer tanto MÍOS como SUS.

Para asegurarse de utilizar un usuario de dominio de SU dominio, simplemente puede establecer la identidad de AppPool. Por supuesto, también puede usar la suplantación de identidad para hacerlo.

Respondido el 23 de junio de 12 a las 21:06

Estoy usando una aplicación de cliente .net y ejecuto la suplantación dentro del código, sin embargo, probé una opción de ejecución y seleccioné SU usuario. Probaré eso. - David Lozzi

parece que mi suplantación de hecho NO está suplantando la cuenta de usuario de ELLOS que necesito. Voy a solucionar este problema primero. - David Lozzi

@DavidLozzi Asegúrate de llamar Inicio de sesiónUsuarioEx y entonces ImpersonateLoggedOnUser para hacer la suplantación. Si está suplantando al usuario que inició sesión sin proporcionar la contraseña, debe configurar su máquina IIS para que sea de confianza para la delegación. - harvey kwok

Por favor mira stackoverflow.com/questions/11314172/… por lo que estoy haciendo en la suplantación de identidad. Echaré un vistazo a LogonUserEx - David Lozzi

Si entiendo su configuración correctamente, está tratando de hacerse pasar por una cuenta de inicio de sesión y usar esa cuenta de inicio de sesión para hacer una enumeración de grupos. Le sugiero que establezca una cuenta de servicio permanente en AppPool para hacer la enumeración de grupos. Esto puede eliminar muchos problemas de permisos en el futuro. El problema de utilizar el enfoque de suplantación de identidad es que no se puede garantizar que la persona que acaba de iniciar sesión tenga suficientes derechos. - harvey kwok

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.