2014-10-16 3 views
1

Вот мой сценарий входа. У меня есть два пользователя 20002143 и 60000027, которые сначала будут аутентифицироваться и перенаправляться по сценарию, а второй будет проходить проверку подлинности и оставаться на одной странице. Я не могу понять, почему. Я вставил контрольные точки все над этим кодом, и он говорит мне, что подтверждает подлинность, но тогда почему страница Войти только перезарядка:Почему мой скрипт перенаправления LDAP терпит неудачу с одним пользователем?

public bool AuthenticateActiveDirectory(string Domain, string EmployeeID, string Password) 
{ 
    try 
    { 
     DirectoryEntry entry = new DirectoryEntry("LDAP://" + Domain, EmployeeID, Password); 
     object nativeObject = entry.NativeObject; 
     return true; 
    } 
    catch 
    { 

     return false; 
    } 
} 

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    string Domain = "domain.local"; 
    string EmployeeID = txtUserID.Text; 
    string Password = txtPassword.Text; 
    string ADStatus = null; 

    if (AuthenticateActiveDirectory(Domain, EmployeeID, Password) == true) 
    { 
     ADStatus = "Success"; 
     Session["SessionLoginStatus"] = ADStatus; 
     Response.Redirect("Intro.aspx?redir=Success&userid=" + EmployeeID); 
    } 
    else 
    { 
     ADStatus = "Failure"; 
     Session["SessionLoginStatus"] = ADStatus; 
     lblADError.Visible = true; 
     lblADError.Text = "Please Check Your Password<br />"; 
    }   
} 

Вот другая часть этого. Если я использую URL для входа ложно со вторым EmpId

https://www.site.com/folder/intro.aspx?redir=Success&userid=60000027 

он будет перенаправлять меня обратно на вход в систему, но это не имеет смысла, так как также Intro.aspx проверку Войти в скриптовой как это.

//checking to see if user logged in 
if ((ADStatus == "Success") && (UserID.Length >= 8)) 
{ 

} 
if ((ADStatus == null) || (UserID.Length < 8)) 
{ 
    ADStatus = "Failure"; 
    Session["SessionLoginStatus"] = ADStatus; 
    Response.Redirect("https://www.site.com/folder/userlogin.aspx"); 
} 
else if (ADStatus == "Failure") 
{ 
    ADStatus = "Failure"; 
    Session["SessionLoginStatus"] = ADStatus; 
    Response.Redirect("https://www.site.com/folder/userlogin.aspx"); 
} 

Что я могу оставить здесь или сделать неправильно?

Edited

Проблема была вызвана логикой на второй странице, которая брошена пользователя обратно на входе в систему, если ID пользователя не соответствует список пользователей, определенных в таблице SQL.

+0

Попробуйте сравнить запросы и их ответы в Fiddler и посмотреть, дает ли это какие-либо подсказки; или если вы можете по крайней мере обмениваться данными с нами, если вы не знаете, как отлаживать их самостоятельно, используя Fiddler. –

+0

Я открыл скрипач, но он говорит только о туннеле на www.site.com при ударе и выходе из страницы входа – Skullomania

+0

вы можете скопировать/вставить исходные ответы от обоих запросов? –

ответ

2

Ни в коем случае, форма или форум не являются аутентификацией пользователей на сервере LDAP. Фактически, ваш метод аутентификации никогда не вернет false, потому что entry никогда не будет равным null, а конструктор для DirectoryEntry никогда не будет генерировать исключение.

С учетом этого убедитесь, что вы правильно вводите учетные данные (потому что я знаю, что вы нет). Посмотрите на свой оператор for для перенаправления. Поскольку ваш метод аутентификации всегда возвращает значение true, он будет пытаться перенаправить все, а кто-то, однако, сработает, потому что вы используете недопустимые учетные данные.

Итак, как насчет вас на самом деле аутентифицировать пользователей, используя PrincipalContext. Вот несколько объяснений между ними с этим DirectoryEntry question.

Кстати, вы захотите использовать bool, возвращаемый вызовом PrincipalContext.ValidateUser.

+0

спасибо @Netscape. Я переписал его – Skullomania