public BooleanResult AuthenticateUser(Shared.Types.SessionProperties properties) { // Get the LdapServer object from the session properties (created in BeginChain) LdapServer server = properties.GetTrackedSingle<LdapServer>(); if (server == null) return new BooleanResult() { Success = false, Message = "Internal error: LdapServer object not available" }; try { m_logger.DebugFormat("AuthenticateUser({0})", properties.Id.ToString()); Shared.Types.UserInformation userInfo = properties.GetTrackedSingle<Shared.Types.UserInformation>(); m_logger.DebugFormat("Received username: {0}", userInfo.Username); // Place credentials into a NetworkCredentials object NetworkCredential creds = new NetworkCredential(userInfo.Username, userInfo.Password); // Authenticate the login m_logger.DebugFormat("Attempting authentication for {0}", creds.UserName); LdapAuthenticator authenticator = new LdapAuthenticator(creds, server); return authenticator.Authenticate(); } catch (Exception e) { if (e is LdapException) { LdapException ldapEx = (e as LdapException); if (ldapEx.ErrorCode == 81) { // Server can't be contacted, set server object to null m_logger.ErrorFormat("Server unavailable: {0}, {1}", ldapEx.ServerErrorMessage, e.Message); server.Close(); properties.AddTrackedSingle<LdapServer>(null); return new BooleanResult { Success = false, Message = "Failed to contact LDAP server." }; } else if (ldapEx.ErrorCode == 49) { // This is invalid credentials, return false, but server object should remain connected m_logger.ErrorFormat("LDAP bind failed: invalid credentials."); return new BooleanResult { Success = false, Message = "Authentication via LDAP failed. Invalid credentials." }; } } // This is an unexpected error, so set LdapServer object to null, because // subsequent stages shouldn't use it, and this indicates to later stages // that this stage failed unexpectedly. server.Close(); properties.AddTrackedSingle<LdapServer>(null); m_logger.ErrorFormat("Exception in LDAP authentication: {0}", e); throw; // Allow pGina service to catch and handle exception } }
public BooleanResult AuthenticateUser(Shared.Types.SessionProperties properties) { try { m_logger.DebugFormat("AuthenticateUser({0})", properties.Id.ToString()); Shared.Types.UserInformation userInfo = properties.GetTrackedSingle<Shared.Types.UserInformation>(); m_logger.DebugFormat("Received username: {0}", userInfo.Username); // Place credentials into a NetworkCredentials object NetworkCredential creds = new NetworkCredential(userInfo.Username, userInfo.Password); // Authenticate the login m_logger.DebugFormat("Attempting authentication for {0}", creds.UserName); LdapAuthenticator authenticator = new LdapAuthenticator(creds); return authenticator.Authenticate(); } catch (Exception e) { m_logger.ErrorFormat("AuthenticateUser exception: {0}", e); throw; // Allow pGina service to catch and handle exception } }