Validando la contraseña de las cuentas de una implementación SharePoint

Me pidieron que validara las cuentas que utilizamos para instalar SharePoint en un ambiente de producción y pues la gente de la mesa de soporte al ver que mi petición no tiene tanta urgencia “según ellos” y  conforme a sus acuerdos de niveles de servicio me informaron que en una semana me tendrían la respuesta a mi solicitud. El problema a solucionar es que no se sabía si la contraseña X era la misma que se usó en todas las cuentas de SharePoint, en total fueron 9 cuentas y dado que en una semana ni siquiera estaré aquí físicamente me vi en la necesidad de encontrar una solución alterna rápidamente.

Las cuentas a validar fueron:

POLLOLOCOSP_farm
POLLOLOCOSP_services
POLLOLOCOSP_web
POLLOLOCOSP_search
POLLOLOCOSP_sync
POLLOLOCOSP_superuser
POLLOLOCOSP_superreader
POLLOLOCOSP_crawl
POLLOLOCOSP_unattended

Estimado lector, para solucionar tu problema, ¿qué harías si en algún momento de tu vida fuiste un apasionado programador .NET y sabes que puedes hacer al respecto?, ¿Te esperarías a que la gente de mesa de soporte de acuerdo a sus prioridades te responda?, ¿serias un radical y con el poder que el conocimiento te da resolverías tú mismo tus problemas, claro sin que muera nadie?

En mi caso decidí bajar Visual Studio 2012 Express for Windows Desktop y escribir una aplicación de consola que utilizando el namespace de System.DirectoryServices pudiese consultar el active directory en cuestión y validar las credenciales que necesito validar. En tan solo 12 minutos ya tenía mi instancia de Visual Studio 2012 Express for Windows Desktop instalada, durante la descarga busqué en internet y encontré que desde la versión 3.5 del .NET Framework se incluyó una nueva funcionalidad para gestión de active directory la cual se encuentra en System.DirectoryServices.AccountManagement y pues utilizando la clase PrincipalContext pude invocar el método ValidateCredentials con el cual sabría si la cuenta X o Y era válida.

El código lo comparto aquí:

using System;
using System.Text;
using System.DirectoryServices.AccountManagement;

namespace TestAccount
{

    class Program
    {

        static void Main(string[] args)
        {

            bool isValidAccount = false;

            Console.WriteLine("Domain Name (NetBios):");
            string domainName = Console.ReadLine();

            Console.WriteLine("User account:");
            string accountName = Console.ReadLine();

            Console.WriteLine("Password:");
            string accountPassword = Console.ReadLine();

            try
            {

                if (string.IsNullOrEmpty(domainName) || string.IsNullOrEmpty(accountName) || string.IsNullOrEmpty(accountPassword))
                    throw new ArgumentNullException();

                using (PrincipalContext context = new PrincipalContext(ContextType.Domain, domainName))
                {                    
                    isValidAccount = context.ValidateCredentials(accountName, accountPassword);
                }

                Console.WriteLine("{0}\{1} - {2}",domainName, accountName, isValidAccount.ValidNotValidString());              
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}",ex.Message);
            }
            finally
            { 
                Console.ReadKey(); 
            }       
            
        }
    }

    public static class BooleanExtensions
    {
        public static string ValidNotValidString(this bool value)
        {
            return value ? "Valid account" : "Not Valid account, check username or password!";
        }
    }
}

 

Y la solución aquí también la puedes encontrar en el attachment, dentro esta el ejecutable compilado.

PD. Cuando el equipo de la mesa de ayuda me contacte de 5 días, que le debería de decir en respuesta?

Saludos

Originalmente publicado en msmvps.com

Publicado por

Haaron Gonzalez

Consultor de tecnología de la información dedicado a entregar soluciones de misión crítica para organizaciones donde la colaboración, la comunicación y el conocimiento son su inversión estratégica. Reconocido como Microsoft Most Valuable Professional en ASP / ASP.NET desde 2005 y SharePoint Server desde 2009. Interés: Satisfacción del Cliente, Excelencia Operacional, Desarrollo de Personas, Ingeniería en Pre-Ventas Especialidades: Colaboración, Gestión de Contenidos Web, Gestión del Conocimiento, Gestión de Contenidos Empresariales, Gestión de Formularios, Intranet, Extranet, Portales, Implementaciones de entornos on-premises de SharePoint, Arquitectura de soluciones, Soporte Especializado en SharePoint y Office 365 Tecnologías: SharePoint todas las versiones, Office 365, Nintex, DocuSign, Sharegate, PowerApps, Flow, SPDocKit, InfoPath, .NET, C #, JavaScript, CSS, Skeleton Framework, Office 365 PnP

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *