Что у меня есть?
Я настроил FBA в одном из веб-приложений, при этом на странице входа в систему есть раскрывающийся список для выбора входа в Windows или FBA.Все работает нормально.
Что я хочу?
Я хочу иметь пользовательскую страницу входа с текстовыми полями для имени пользователя и пароля и кнопку входа, которая будет использоватьсядля аутентификации пользователей Windows и FBA.Чтобы различать два разных входа в систему, я хочу обработать событие OnAuthenticate и проверить, содержит ли имя пользователя '\', а затем предположить, что это пользователь Windows, в противном случае это пользователь FBA.
Это код, написанный наОбработчик события OnAuthenticate:
protected void signinControl_Authenticate(object sender, AuthenticateEventArgs e)
{
string fullUserName = signinControl.UserName;
string username = null;
if (fullUserName.Contains("\\")) //Windows user
{
string domain = fullUserName.Substring(0, fullUserName.IndexOf("\\"));
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain))
{
username = fullUserName.Substring(fullUserName.IndexOf("\\") + 1);
e.Authenticated = pc.ValidateCredentials(username, signinControl.Password);
}
}
else //FBA user
{
e.Authenticated = Membership.ValidateUser(fullUserName, signinControl.Password);
}
}
С какой проблемой я столкнулся?
Приведенный выше код хорошо работает для пользователей FBA.Но, когда я пытаюсь войти в систему с пользователем Windows, хотя e.Authenticated
установлен после проверки true
, он выдает следующее сообщение об ошибке: «Ваша попытка входа не удалась. Пожалуйста, попробуйте еще раз.».
e.Authenticated = pc.ValidateCredentials(username, signinControl.Password);
Я считаю, что установка e.Authenticated
в true
должна перенаправить пользователя со страницы входа на запрошенную страницу.Может ли кто-нибудь помочь мне, если я должен сделать что-нибудь еще, чтобы пользователь Windows вошел в систему?
Update-1 :
Я использовал SetAuthCookie()
метод для установки Cookieявно, все тот же результат.
FormsAuthentication.SetAuthCookie(username, true);