2012-01-07 4 views
0

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

ответ

0

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

Смежные вопросы