SharePoint Latin Rotating Header Image

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:


POLLOLOCO\SP_farm
POLLOLOCO\SP_services
POLLOLOCO\SP_web
POLLOLOCO\SP_search
POLLOLOCO\SP_sync
POLLOLOCO\SP_superuser
POLLOLOCO\SP_superreader
POLLOLOCO\SP_crawl
POLLOLOCO\SP_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

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Network-wide options by YD - Freelance Wordpress Developer