Esta guia describe el bloque vigente de v3.0 para autenticacion, autorizacion y compuertas de acceso del sistema: login administrativo, roles, acceso por categoria o por lista blanca de correos, CAPTCHA, rate limits publicos, tokens y autenticacion de servicios REST. El contenido fue contrastado contra las pantallas Wicket, los EJB de login y validacion, el scheduler que limpia caches, y la capa JAX-RS que protege los WS.
/login y todo /admin/*./token/*, formularios publicos y pantallas de acceso denegado./elections-ws/*, incluyendo endpoints legacy, tablas y snapshots v2./admin/ipaccess y tablas WS asociadas./login y autentica segun WS_AUTH_METHOD de elections.properties, generado por Docker desde el .env.WS_AUTH_METHOD=APP, la sesion usa autenticacion local contra UserAdmin. La UI calcula SHA-256 sobre la contrasena, lo representa en hexadecimal mayuscula y envia ese valor a userAdminLogin(). El metodo historico que hace el calculo aun se llama wantHashMd5(), pero su implementacion vigente ya no usa MD5.WS_AUTH_METHOD toma otro valor, la sesion usa login() contra el framework externo centralizado mediante UtilsLogin.login().elections-manager, elections-statutary-only o elections-non-statutary-only.elections-deleter por si solo no habilita login externo.elections-manager y elections-deleter; en la practica, un admin local autenticado entra con perfil administrativo pleno.X-Forwarded-For, luego X-Real-IP y, si no hay proxy headers, remoteAddr.WS_AUTH_METHOD=APP en el .env. Docker lo copia a elections.properties; no hace falta ni existe una variable FRESH_AUTH_METHOD.docker-fresh.sh crea el primer administrador desde FRESH_ADMIN_USER, FRESH_ADMIN_PASSWORD y FRESH_ADMIN_EMAIL.useradmin siguiendo el procedimiento parametrizado de la guia de instanciacion.http://localhost:8098/elections/login; detras de un proxy es https://<servidor>/elections/login.APP. Actualmente TOTP solo se envia al mecanismo externo.WS_LACNIC_AUTH_URL y los roles esperados por Elecciones.DashboardManagerBasePage y exigen elections-manager.DashboardElectionBasePage y admiten elections-manager, elections-statutary-only o elections-non-statutary-only.SecurityUtils.canAccessElection().elections-manager entra a cualquier eleccion. Un usuario que acumule roles estatutario y no estatutario tambien queda habilitado para todas las categorias.statutary-only solo accede a elecciones STATUTORY; un usuario non-statutary-only solo accede a categorias no estatutarias.Election.authorizedUserEmails, ese usuario puede acceder a esa eleccion aunque no coincida con la categoria habitual./error401.LOGIN_CAPTCHA_ENABLED vale true y existen las dos claves de Google: DataSiteKeyReCaptcha y SkGoogleApiReCaptcha.LOGIN_CAPTCHA_ENABLED falta, viene vacio o contiene un valor invalido, el sistema usa true como valor seguro y compatible con instalaciones existentes.shouldShowLoginCaptcha(userName, ip) consulta la cache de intentos fallidos de esa IP.LOGIN_CAPTCHA_MAX_ATTEMPTS y por defecto es 5.LOGIN_CAPTCHA_RATE_LIMIT_CACHE_RESET_HOURS; si el parametro falta o es invalido, cae a 6 horas.DashboardPublicBasePage y PublicTokenBasePage: si la IP ya quedo rate-limited, la respuesta corta en /error429.Error404, el sistema registra el intento fallido en dos lugares: la tabla IpAccess y una cache en memoria.PUBLIC_FAILED_ACCESS_MAX_ATTEMPTS y por defecto es 50.429 aparece desde el intento invalido numero 51.PUBLIC_FAILED_ACCESS_RATE_LIMIT_CACHE_RESET_HOURS; si falta o es invalido, cae a 1 hora.IpAccess no se limpia con ese scheduler: conserva historial de primer intento, ultimo intento y acumulado./admin/ipaccess no es una blacklist activa ni una pantalla de desbloqueo: es un visor historico de intentos fallidos registrados./public-elections desactiva explicitamente este rate limit generico.UserVoter.voteToken, Election.resultToken, Auditor.resultToken, token de nominacion o token de apoyo.Error404 y, salvo excepciones puntuales, cuenta para el rate limit publico.TokenAccessGate con switches manuales de la eleccion y ventanas de calendario publico.PublicAccessDeniedPage con codigo funcional y countdown hacia la fecha relevante.votingLinkAvailable, resultLinkAvailable, auditorLinkAvailable, doNominationLinkAvailable, nominationTasksLinkAvailable, nominationSupportLinkAvailable y publicElectionLinkAvailable con hitos N_1, N_2, N_12, N_16, N_17 y N_18 segun la ruta.isShowCaptcha() devuelve verdadero y existe DataSiteKeyReCaptcha, el sistema activa CAPTCHA tambien en varios formularios publicos.isValidCaptchaResponse() que el login administrativo.ElectionsService y ElectionsTablesServices./hc, los endpoints legacy, los de tablas y tambien los snapshots /v2 pasan por autenticacion.APP, la regla es doble: header Authorization igual a WS_AUTH_TOKEN y IP cliente incluida en WS_AUTHORIZED_IPS; los tres valores se leen desde elections.properties.Authorization al servicio remoto configurado en WS_LACNIC_AUTH_URL.api-Elections.v2 exige rol remoto api-ElectionsPublicInformation.APP, la IP se valida contra WS_AUTHORIZED_IPS. En modo centralizado, se valida contra el set ipAllowed devuelto por el servicio remoto.401. Si el metodo de autenticacion esta mal configurado o ocurre una excepcion, responde 500.X-FORWARDED-FOR si existe; en caso contrario usa request.getRemoteAddr(). A diferencia de la UI web, no separa el primer hop ni consulta X-Real-IP.WS_MAX_PAGE_SIZE.EMAIL_HOST, EMAIL_USER, EMAIL_PASSWORD, WS_AUTH_TOKEN y WS_AUTHORIZED_IPS.DataSiteKeyReCaptcha no son secretos.elections-manager y elections-deleter.IpAccess.v2, aunque su nombre refiera a informacion publica.v3.0 cuando termine el relevamiento integral.ElectionsManagerApp, ElectionsWebAdminSession, SecurityUtils, DashboardAdminBasePage, DashboardManagerBasePage, DashboardElectionBasePage, LoginDashboard, LoginPanel, AdminNavBarPanel, IpAccessDashboard, IpAccessListPanel, DashboardPublicBasePage, PublicTokenBasePage, PublicAccessDeniedPage, PublicElectionRecoverLinkPanel, PublicPhotoResizeDashboard, VotePublicPage, ResultPublicPage, AskCandidateQuestionPage, AuditPublicDashboardPage, ElectionsManagerEJBBean, ElectionsVoterEJBBean, ElectionsPreNominationEJBBean, ElectionsMonitorEJBBean, ElectionScheduler, ElectionsCaches, IpAccess, IpAccessDao, ElectionsRoles, WebServiceAuthentication, ElectionsService, ElectionsTablesServices, ElectionsServicesApplication y los tests WebServiceAuthenticationTest.