Расширение функциональности входа в систему - PullRequest
0 голосов
/ 07 января 2012

Что является лучшей практикой для расширения функциональности входа в систему C1.Хотелось бы расширить возможности текущего процесса входа, заменив аутентификацию по паролю на многофакторную аутентификацию.Я заинтересован в знании ключевых понятий и подключений к C1, чтобы разрешить аутентификацию пользователя в C1 после завершения многофакторной аутентификации.

1 Ответ

0 голосов
/ 07 января 2012

Вы смотрели на это обсуждение 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.

...