2016-04-19 5 views
1

Мне нужно проверить правильность ввода пользователем в текущие окна сеанса. Таким образом, я использую ниже код:Не удалось подтвердить имя пользователя и пароль

private void LoginUser(string username, string password) 
{ 
    bool isCredentialValid = false; 

    using (PrincipalContext context = new PrincipalContext(ContextType.Domain)) 
    { 
     isCredentialValid = context.ValidateCredentials(username, password); 
    } 
    if (isCredentialValid) 
    { 
     // 
    } 
    else 
    { 
     // 
    } 
} 

Проблема, которую я всегда получаю ложное как ValidateCredentials результат.

Rq: Я использую .Net Framework 4.5

+2

Это метод .Net –

+0

Вы проверили это? http://stackoverflow.com/questions/2363620/principalcontext-validatecredentials-always-returns-false –

+0

Убедитесь, что приложение имеет доступ к домену с правильными учетными данными –

ответ

3

Из MSDN http://msdn.microsoft.com/en-us/library/bb154889.aspx

Метод ValidateCredentials связывается с сервером, указанным в конструктора. Если параметры имени пользователя и пароля являются нулевыми, проверяются учетные данные , указанные в конструкторе. Если в конструкторе не указаны идентификаторы , а параметры имени пользователя и равны нулю, этот метод проверяет учетные данные по умолчанию для для текущего принципала.

В конструкторе PrincipalContext вы также можете указать учетные данные, которые хотите проверить.

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain, 
        container, ContextOptions.SimpleBind, username, password)) 
{ 
    return pc.ValidateCredentials(domain + @"\" + username, password, 
           ContextOptions.SimpleBind); 
} 

Попробуйте этот.

+1

Не использовать 'ContextOptions.SimpleBind', он отправит ваш пароль с четким текстом – Raghuveer

+1

@ irvgk, No, ContextOptions.SimpleBind означает использование Basic Authentication. Это не означает отправки пароля с открытым текстом. –

+0

Благодарим вас за ответ, и он работает даже без указания ContextOptions –

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