Вы смотрели на это обсуждение http://compositec1.codeplex.com/discussions/268428?Здесь приведен пример кода для класса, реализующего интерфейс ILoginProvider
, который вызывается при аутентификации комбинации имени пользователя и пароля.
public class LDAPLoginProvider : IFormLoginProvider
{
public bool CanSetUserPassword
{
get { return false; }
}
public bool CanAddNewUser
{
get { return false; }
public bool UsersExists
{
get { return DataFacade.GetData<IUser>().Any(); }
}
public IEnumerable<string> AllUsernames
{
get { return (from u in DataFacade.GetData<IUser>() select u.Username).ToList(); }
}
void SetUserPassword(string username, string password)
{
throw new NotImplementedException();
}
void AddNewUser(string userName, string password, string group)
{
throw new NotImplementedException();
}
LoginResult Validate(string username, string password)
{
var user =
(from u in DataFacade.GetData<IUser>()
where String.Compare(u.Username, username, StringComparison.InvariantCultureIgnoreCase) == 0
select u).FirstOrDefault();
if (user == null)
{
return LoginResult.UserDoesNotExist;
}
bool loginIsValid = false;
try
{
var entry = new DirectoryEntry("LDAP://domain.com", username, password);
object nativeObject = entry.NativeObject;
loginIsValid = true;
}
catch (DirectoryServicesCOMException ex)
{
//not authenticated; reason why is in ex
}
catch (Exception ex)
{
//not authenticated due to some other exception
}
return loginIsValid ? LoginResult.Success : LoginResult.IncorrectPassword;
}
}
Здесь все еще нужно создавать пользователей в C1, но пароли проверяютсяпо отношению к внешнему источнику, здесь сервер LDAP.