/// <summary> /// Effettua il login di un utente /// </summary> /// <param name="utente">Oggetto Utente connesso</param> /// <returns>True = OK; False = Si è verificato un errore</returns> public bool LoginUser(DocsPaVO.utente.UserLogin userLogin, out DocsPaVO.utente.Utente utente, out DocsPaVO.utente.UserLogin.LoginResult loginResult) { bool result = true; utente = null; loginResult = DocsPaVO.utente.UserLogin.LoginResult.OK; try { DocsPaDB.Query_DocsPAWS.Utenti utenti = new DocsPaDB.Query_DocsPAWS.Utenti(); string name = System.String.Empty; string password = System.String.Empty; int idAmm = 0; if (!string.IsNullOrEmpty(userLogin.UserName)) { name = userLogin.UserName; } if (!string.IsNullOrEmpty(userLogin.Password)) { password = userLogin.Password; } if (!string.IsNullOrEmpty(userLogin.IdAmministrazione)) { idAmm = Convert.ToInt32(userLogin.IdAmministrazione); } if (utenti.IsUtenteDisabled(userLogin.UserName, userLogin.Modulo)) { loginResult = DocsPaVO.utente.UserLogin.LoginResult.DISABLED_USER; result = false; logger.Debug("Utente disabilitato"); } //verifica userId su tabella utenti string peopleId = string.Empty; if (result && !utenti.UserLogin(out peopleId, name, idAmm.ToString(), userLogin.Modulo)) { loginResult = DocsPaVO.utente.UserLogin.LoginResult.UNKNOWN_USER; result = false; logger.Debug("Utente sconosciuto"); } if (result && !string.IsNullOrEmpty(peopleId)) { //controlla se deve eseguire la login usando il 'token' if (!string.IsNullOrEmpty(userLogin.Token)) { //esegue l'autenticazione con token; string message = string.Empty; if (!Documentale.SSOLogin.loginWithToken(userLogin.Token, out message)) { result = false; loginResult = DocsPaVO.utente.UserLogin.LoginResult.UNKNOWN_USER; logger.Debug("Utente non autenticato con token. --" + message); } } else { if (DocsPaUtils.Security.SSOAuthTokenHelper.IsAuthToken(userLogin.Password)) { try { // Verifica la validità del token di autenticazione string token = DocsPaUtils.Security.SSOAuthTokenHelper.Restore(userLogin.UserName, userLogin.Password); // Il token è l'id della sessione utente: // se nella dpa_login è già stata assegnata una sessione con quest'id, il token non è valido result = true; } catch (Exception ex) { logger.Debug("Errore nell'autenticazione dell'utente tramite Token Single Sign On", ex); loginResult = DocsPaVO.utente.UserLogin.LoginResult.APPLICATION_ERROR; result = false; } } else { // Verifica se l'utente è configurato per connettersi ad un archivio LDAP if (DocsPaLdapServices.LdapUserConfigurations.UserCanConnectToLdap(userLogin.UserName)) { // Autenticazione utente in LDAP DocsPaLdapServices.Core.BaseLdapUserServices ldapServices = DocsPaLdapServices.Core.LdapUserServicesFactory.GetConfiguredInstance(userLogin.IdAmministrazione); // Reperimento del nome dell'utente corrispondente in LDAP string userNameLdap = DocsPaLdapServices.LdapUserConfigurations.GetLdapUserConfigByName(userLogin.UserName).LdapIdSync; if (!ldapServices.AuthenticateUser(userNameLdap, userLogin.Password)) { result = false; loginResult = DocsPaVO.utente.UserLogin.LoginResult.UNKNOWN_USER; logger.Debug("Utente non valido o non trovato"); } } else { string utenteDominio; //verifica se deve bisogna eseguire l'autenticazione su dominio; utenti.GetDominio(out utenteDominio, peopleId); if (!string.IsNullOrEmpty(utenteDominio)) { string[] arr = this.separaDominio(utenteDominio); if (arr.GetLength(0) < 2) { result = false; loginResult = DocsPaVO.utente.UserLogin.LoginResult.APPLICATION_ERROR; logger.Debug("Firma dell'utente sul dominio non valida."); } string userName = arr[1]; string dominio = arr[0]; //esegue l'autenticazione su dominio; if (result && !this.loginOnDomain(dominio, userName, password)) { result = false; loginResult = DocsPaVO.utente.UserLogin.LoginResult.UNKNOWN_USER; logger.Debug("Utente non autenticato sul dominio"); } } else { AdminPasswordConfig pwdConfig = new AdminPasswordConfig(); if (pwdConfig.IsSupportedPasswordConfig()) { // Nuova gestione password logger.Debug("inizio controllo se passowrd è valida"); if (!DocsPaPwdServices.UserPasswordServices.IsValidForLogon(name, password)) { logger.Debug("la passowrd è differente da quella registrata."); result = false; loginResult = DocsPaVO.utente.UserLogin.LoginResult.UNKNOWN_USER; logger.Debug("Utente non valido o non trovato"); } if (userLogin != null && userLogin.Modulo != null && DocsPaUtils.Moduli.ModuliAuthManager.IsModuloCentroServizi(userLogin.Modulo)) { //Se accedo dal centro servizi con un utente abilitato solo al centro servizi } else { // Verifica se è attiva la gestione delle scadenze password if (result && DocsPaPwdServices.UserPasswordServices.PasswordExpirationEnabled(name)) { // Verifica se è presente la password predefinita assegnata dall'amministratore if (DocsPaPwdServices.UserPasswordServices.IsPasswordExpired(name)) { // Se la password è scaduta, richiede l'immissione di una nuova password result = false; loginResult = DocsPaVO.utente.UserLogin.LoginResult.PASSWORD_EXPIRED; logger.Debug("La password definita per l'utente è scaduta"); } } } } else { // Vecchia gestione password, se il documentale non la supporta //autenticazione completa su tabella utenti if (!utenti.UserLogin(out peopleId, name, password, idAmm.ToString())) { result = false; loginResult = DocsPaVO.utente.UserLogin.LoginResult.UNKNOWN_USER; logger.Debug("Utente non valido o non trovato"); } } } } } } if (result) { // Reperimento metadati dell'utente utente = utenti.GetUtente(name, userLogin.IdAmministrazione, userLogin.Modulo); // Associazione token di autenticazione utente.dst = this.CreateUserToken(); } } } catch (Exception ex) { logger.Debug("Errore nella login.", ex); result = false; utente = null; } return(result); }
/// <summary> /// Effettua il login di un utente /// </summary> /// <param name="utente">Oggetto Utente connesso</param> /// <returns>True = OK; False = Si è verificato un errore</returns> public bool LoginUser(DocsPaVO.utente.UserLogin userLogin, out DocsPaVO.utente.Utente utente, out DocsPaVO.utente.UserLogin.LoginResult loginResult) { bool result = true; utente = null; loginResult = DocsPaVO.utente.UserLogin.LoginResult.OK; try { DocsPaDB.Query_DocsPAWS.Utenti utenti = new DocsPaDB.Query_DocsPAWS.Utenti(); string name = System.String.Empty; string password = System.String.Empty; string idAmm = null; if (userLogin.UserName != null) { name = userLogin.UserName; } if (userLogin.Password != null) { password = userLogin.Password; } idAmm = userLogin.IdAmministrazione; string peopleId = string.Empty; if (utenti.IsUtenteDisabled(userLogin.UserName, idAmm)) { loginResult = DocsPaVO.utente.UserLogin.LoginResult.DISABLED_USER; result = false; } //verifica userId su tabella utenti if (result && !utenti.UserLogin(out peopleId, name, idAmm, userLogin.Modulo)) { loginResult = DocsPaVO.utente.UserLogin.LoginResult.UNKNOWN_USER; result = false; } if (result && !string.IsNullOrEmpty(peopleId)) { string utenteDominio; userLogin.SystemID = peopleId; //verifica se deve bisogna eseguire l'autenticazione su dominio; utenti.GetDominio(out utenteDominio, peopleId); if (!string.IsNullOrEmpty(utenteDominio)) { string[] arr = this.separaDominio(utenteDominio); if (arr.GetLength(0) < 2) { loginResult = DocsPaVO.utente.UserLogin.LoginResult.APPLICATION_ERROR; result = false; logger.Debug("Firma dello user sul dominio non valida."); } if (result) { string userName = arr[1]; string dominio = arr[0]; userLogin.Dominio = dominio; //esegue l'autenticazione su dominio; if (!this.loginOnDomain(dominio, userName, password)) { loginResult = DocsPaVO.utente.UserLogin.LoginResult.UNKNOWN_USER; result = false; logger.Debug("Utente non autenticato sul dominio"); } } } else { //autenticazione completa su tabella utenti if (!utenti.UserLogin(out peopleId, name, password, idAmm, userLogin.Modulo)) { loginResult = DocsPaVO.utente.UserLogin.LoginResult.UNKNOWN_USER; result = false; logger.Debug("Utente non trovato"); } } if (!string.IsNullOrEmpty(peopleId)) { utente = utenti.GetUtente(name, userLogin.IdAmministrazione); } else { result = false; } } } catch (Exception ex) { logger.Debug("Errore nella login.", ex); result = false; utente = null; } if (result) { string dst = string.Empty; try { string gruppoFilenet = ConfigurationManager.AppSettings["FNET_userGroup"].ToString(); if (string.IsNullOrEmpty(gruppoFilenet)) { loginResult = DocsPaVO.utente.UserLogin.LoginResult.APPLICATION_ERROR; result = false; logger.Debug("Gruppo Filenet non indicato"); } else { dst = LoginToFileNet(userLogin, gruppoFilenet); result = true; utente.dst = dst; userLogin.DST = dst; } } catch (Exception e) { if (e.Message == "Non essendo abilitato, l'utente non può connettersi ai servizi del documento IDM.") { loginResult = DocsPaVO.utente.UserLogin.LoginResult.DISABLED_USER; } logger.Debug("Errore nella login Filenet", e); utente = null; result = false; } } return(result); }