2

Я прочитал миллионы сообщений об активной аутентификации каталогов, но не нашел сообщений о моей проблеме.Аутентификация пользователя в отношении активного каталога с использованием форм MVC4 с дополнительным доменом ввода имя пользователя или просто имя пользователя

Я хочу, чтобы проверить подлинность пользователя от активного каталога с аутентификацией MVC4 формы и позволяя вставить имя домена в качестве опции:

acc: domain.com\username or username 
pwd: password 

Моя компания имеет 20 субдоменов и мне нужно, чтобы проверить подлинность каждого домена, и именно поэтому я не 't как вариант сохранить мои домены в конфигурации приложения и выбрать из него.

Запись каталога:

var directoryEntry = new DirectoryEntry("LDAP://" + domain, userName, password); 

было бы здорово, но если пользователь не оденьте домена перед именем? я получаю исключение, и пользователь не будет аутентифицирован. Я хочу иметь метод:

public bool AuthenticateUser(string username, string password) 
{ 
    Checking if username has domain name included; 
    use some kind of authetication method; 
    returns true/false; 
} 

с вручную разбором имени пользователя и проверкой все, если условия и так далее, мой метод будет выглядеть как дерьмо, может быть, это какое-то параметр в приложении конфигурации, чтобы написать, что дало бы мне возможность разрешить пользователю вводить имя домена \ имя пользователя или просто имя пользователя, а затем я могу получить домен + имя пользователя или просто имя пользователя, а затем аутентифицировать пользователя от AD.

Заранее спасибо.

ответ

2

Вы могли бы попытаться использовать двойное решение аутентификации с использованием как членство и PrincipalContext

public bool ActiveDirectoryAuthentication(string username, string password) 
    { 
     var splittedCredentials = username.Split(new[] { "\\" }, StringSplitOptions.None); 
     switch (splittedCredentials.Length) 
     { 
      case 1: 
       { 
        var authenticated = Membership.ValidateUser(username, password); 
        if (authenticated) 
        { 
         FormsAuthentication.SetAuthCookie(username, false); 
        } 
        return authenticated; 
       } 
      case 2: 
       { 
        var principalContext = new PrincipalContext(ContextType.Domain, splittedCredentials[0]); 

        using (principalContext) 
        { 
         var authenticated = principalContext.ValidateCredentials(splittedCredentials[1], password); 

         if (authenticated) 
         { 
          FormsAuthentication.SetAuthCookie(splittedCredentials[1], false); 
         } 
         return authenticated; 
        } 
       } 
      default: 
       return false; 
     } 
    } 
  • До этого не забудьте проверить входы пользователей
  • Во-первых расколоть Войти строка
  • Если пользователь не имеет введенное использование домена Членство
  • Если пользователь ввел доменное имя, используйте PrincipalContext
  • В случае возникновения другого события вы вернете false
+0

Спасибо, хорошая идея на самом деле :) – Erikas

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