public async Task <IActionResult> Login(SSODto.Login.RequestModel oItem)
        {
            try
            {
                var oResponse = new Response <SSODto.Login.Response>();
                oResponse.IsSuccess = false;

                #region VALIDACION DE CAPTCHA

                if (string.IsNullOrEmpty(oItem.sCode))
                {
                    oResponse.Message = Messages.SSO.Login.EX008;
                    return(Ok(oResponse));
                }

                if (!this._captchaApplication.ComputeMd5Hash(oItem.sCode).Equals(CaptchaHash))
                {
                    HttpContext.Session.Remove(this._sCaptchaHashKey);
                    oResponse.Message = Messages.SSO.Login.EX009;
                    return(Ok(oResponse));
                }

                if (CaptchaHash != null)
                {
                    HttpContext.Session.Remove(this._sCaptchaHashKey);
                }

                #endregion

                #region VALIDACION DE USUARIO

                var oUser = await this._sSOApplication.Login(oItem);

                if (!oUser.IsSuccess)
                {
                    oResponse.Message = Messages.SSO.Login.EX001;
                    return(Ok(oResponse));
                }

                if (oUser.Data == null)
                {
                    oResponse.Message = Messages.SSO.Login.EX001;
                    return(Ok(oResponse));
                }

                if (oUser.Data.IdUsuario == 0)
                {
                    oResponse.Message = Messages.SSO.Login.EX001;
                    return(Ok(oResponse));
                }

                #endregion

                #region VALIDACION DE EMPRESAS

                var oEmpresas = await this._sSOApplication.GetEmpresas(oItem.sUsername);

                if (!oEmpresas.IsSuccess)
                {
                    oResponse.Message = Messages.SSO.Login.EX002;
                    return(Ok(oResponse));
                }

                if (oEmpresas.Data == null)
                {
                    oResponse.Message = Messages.SSO.Login.EX002;
                    return(Ok(oResponse));
                }

                if (oEmpresas.Data.Count == 0)
                {
                    oResponse.Message = Messages.SSO.Login.EX002;
                    return(Ok(oResponse));
                }

                #endregion

                var oTmpEmpresa = oEmpresas.Data[0];

                #region VALIDACION DE LOCALES

                if (oTmpEmpresa.Locales == null)
                {
                    oResponse.Message = Messages.SSO.Login.EX003;
                    return(Ok(oResponse));
                }

                if (oTmpEmpresa.Locales.Count == 0)
                {
                    oResponse.Message = Messages.SSO.Login.EX003;
                    return(Ok(oResponse));
                }

                #endregion

                oUser.Data.nIdEmpresa     = oTmpEmpresa.IdEmpresa;
                oUser.Data.sNombreEmpresa = oTmpEmpresa.NombreCentro;
                oUser.Data.nIdLocal       = oTmpEmpresa.Locales[0].IdLocal;
                oUser.Data.sNombreLocal   = oTmpEmpresa.Locales[0].NombreLocal;

                #region VALIDACION DE PERFILES

                var oPerfiles = await this._sSOApplication.GetPerfiles(oItem.sUsername, oUser.Data.nIdLocal.ToString());

                if (!oPerfiles.IsSuccess)
                {
                    oResponse.Message = Messages.SSO.Login.EX004;
                    return(Ok(oResponse));
                }

                if (oPerfiles.Data == null)
                {
                    oResponse.Message = Messages.SSO.Login.EX004;
                    return(Ok(oResponse));
                }

                if (oPerfiles.Data.Count == 0)
                {
                    oResponse.Message = Messages.SSO.Login.EX004;
                    return(Ok(oResponse));
                }


#if DEBUG
                // ================================
                // ===== SECCION PARA PRUEBAS =====
                // ================================
                //oPerfiles.Data[0].NombreRol = "OES";
                oPerfiles.Data[0].NombreRol = "OGTU";
                //oPerfiles.Data[0].NombreRol = "Promovilidad";
#endif

                int nCantPerfilesValidos = 0;
                foreach (var item in oPerfiles.Data)
                {
                    nCantPerfilesValidos = this._perfilesPermitidos.Count(str => str.ToUpper().Equals(item.NombreRol.ToUpper()));
                    if (nCantPerfilesValidos > 0)
                    {
                        oUser.Data.nIdPerfil     = item.IdRol;
                        oUser.Data.sNombrePerfil = item.NombreRol;
                        break;
                    }
                }

                if (nCantPerfilesValidos == 0)
                {
                    oResponse.Message = Messages.SSO.Login.EX005;
                    return(Ok(oResponse));
                }

                #endregion

                #region VALIDACION INFORMACION DE USUARIO

                var oUserInfo = await this._sSOApplication.GetUserInfo(oUser.Data.IdUsuario);

                if (!oUserInfo.IsSuccess)
                {
                    oResponse.Message = Messages.SSO.Login.EX006;
                    return(Ok(oResponse));
                }

                if (oUserInfo.Data == null)
                {
                    oResponse.Message = Messages.SSO.Login.EX006;
                    return(Ok(oResponse));
                }

                if (oUserInfo.Data.PK_eIdUsuario == 0)
                {
                    oResponse.Message = Messages.SSO.Login.EX006;
                    return(Ok(oResponse));
                }

                #endregion

                oUser.Data.sCorreo         = oUserInfo.Data.uCorElectronico;
                oUser.Data.sNombreCompleto = oUserInfo.Data.NombreCompleto;

                #region VALIDACION DE REGISTRO DE SESION EN BD

                var oRequestRegistrarSesion = new AdminDto.RegistrarSesion();
                oRequestRegistrarSesion.sUsuario      = oItem.sUsername.ToUpper();
                oRequestRegistrarSesion.sUsuarioSSO   = null;
                oRequestRegistrarSesion.sIp           = "0.0.0.0";
                oRequestRegistrarSesion.sFlag         = "1";
                oRequestRegistrarSesion.nIdSessionSSO = oUser.Data.IdUsuario;

                var oRegistroSesion = await this._adminApplication.RegistrarSesion(oRequestRegistrarSesion);

                if (!oRegistroSesion.IsSuccess)
                {
                    oResponse.Message = Messages.SSO.Login.EX007;
                    return(Ok(oResponse));
                }

                if (oRegistroSesion.Data == 0)
                {
                    oResponse.Message = Messages.SSO.Login.EX007;
                    return(Ok(oResponse));
                }

                #endregion

                oUser.Data.nIdSession = oRegistroSesion.Data; //Obtiene Id Sesion del SIROS (DB)

                #region GENERAR JWT

                var oJwt = new JwtDto.Request();
                oJwt.sUsername    = oItem.sUsername.ToUpper(); //Forzar mayuscula
                oJwt.sUsernameSSO = oUser.Data.IdUsuario.ToString();
                oJwt.sProfile     = oUser.Data.sNombrePerfil;
                oJwt.sIdSession   = oUser.Data.nIdSession.ToString();
                oJwt.nIdEmpresa   = oUser.Data.nIdEmpresa;
                oJwt.nIdLocal     = oUser.Data.nIdLocal;

#if DEBUG
                // ================================
                // ===== SECCION PARA PRUEBAS =====
                // ================================
                oJwt.nIdEmpresa = 1166;
#endif

                var oToken = await this._jwtApplication.GenerateJwtToken(oJwt);

                oUser.Data.sToken           = oToken.Data.sToken;
                oUser.Data.dTokenExpiration = oToken.Data.dTokenExpiration;

                #endregion

                oResponse.IsSuccess = true;
                oResponse.Data      = oUser.Data;
                return(Ok(oResponse));
            }
            catch (Exception ex)
            {
                _ = this._logApplication.SetLog(EnumLogType.TEXT_N_EMAIL, EnumLogCategory.ERROR, "SSO-Login", ex, oItem);
                return(Ok(new Response <Object> {
                    Message = $"[SSO]: ERR-Fallo en el servidor: {ex.StackTrace}"
                }));
            }
        }
        public async Task <Response <SSODto.Login.Response> > Login(SSODto.Login.RequestModel oItem)
        {
            const string METHOD_NAME = "Login";

            try
            {
                string sToken = await this.AuthMiddleWare();

                if (string.IsNullOrEmpty(sToken))
                {
                    throw new Exception($"({SERVICE_NAME}-{METHOD_NAME}): Metodo Auth devolvio un token vacio o null.");
                }

                var oResponse = new Response <SSODto.Login.Response>();
                oResponse.IsSuccess = false;

                using (WebApiClient oHttpClient = new WebApiClient(sToken))
                {
                    string sUrl = this._settingsServicios.MiddleWareAPI + "api/v1/sso/Login";

                    var oRequest = new SSODto.Login.Request();
                    oRequest.ApplicationId = this._settingsSSO.ApplicationId;
                    oRequest.TokenUser     = this._settingsSSO.TokenUser;
                    oRequest.TokenPassword = this._settingsSSO.TokenPassword;
                    oRequest.UserName      = oItem.sUsername;
                    oRequest.UserPassword  = oItem.sPassword;

                    var oClientResponse = await oHttpClient.CallPostAsync <SSODto.Login.Request, SSODto.SSOResponse <SSODto.Login.Response> >(sUrl, oRequest);

                    if (oClientResponse.StatusCode == HttpStatusCode.OK)
                    {
                        oResponse.IsSuccess = oClientResponse.Content.Success;
                        oResponse.Data      = oClientResponse.Content.Data;
                    }
                    else if (oClientResponse.StatusCode == HttpStatusCode.BadRequest)
                    {
                        oResponse.Message = $"({SERVICE_NAME}-{METHOD_NAME}) {oClientResponse.Content.Message}";
                    }
                    else if (oClientResponse.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        oResponse.Message = $"({SERVICE_NAME}-{METHOD_NAME}) [401] Acceso Denegado.";
                    }
                    else if (oClientResponse.StatusCode == HttpStatusCode.NotFound)
                    {
                        oResponse.Message = $"({SERVICE_NAME}-{METHOD_NAME}) [404] Ruta Invalida.";
                    }
                    else if (oClientResponse.StatusCode == HttpStatusCode.InternalServerError)
                    {
                        oResponse.Message = $"({SERVICE_NAME}-{METHOD_NAME}) [500] Error Interno.";
                    }
                    else
                    {
                        oResponse.Message = $"({SERVICE_NAME}-{METHOD_NAME}) [{(int)oClientResponse.StatusCode}] Error Desconocido.";
                    }
                }

                return(oResponse);
            }
            catch (Exception ex)
            {
                throw new Exception($"({SERVICE_NAME}-{METHOD_NAME}) : " + ex.Message);
            }
        }