To validate I find it simpler to just do something like this:
using System.DirectoryServices.AccountManagement;
bool flag = false;
try
{
using (PrincipalContext principalContext = new PrincipalContext(ContextType.Domain))
{
flag = principalContext.ValidateCredentials("UserId", "Password");
}
}
catch (PrincipalServerDownException)
{
}
To get roles you can look at this answer:
https://stackoverflow.com/a/6247905/67566
I wouldn't use the two options you mentioned, personally, as there are newer options that I think make life simpler.
There are various options on instantiating PrincipleContext so you may want to look at: