コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }