{ "realm": "{{REALM}}", "enabled": true, "displayName": "Athletic Map — {{TENANT}}", "loginWithEmailAllowed": true, "resetPasswordAllowed": true, "rememberMe": true, "bruteForceProtected": true, "permanentLockout": false, "failureFactor": 10, "waitIncrementSeconds": 60, "maxFailureWaitSeconds": 900, "maxDeltaTimeSeconds": 43200, "minimumQuickLoginWaitSeconds": 60, "quickLoginCheckMilliSeconds": 1000, "webAuthnPolicyPasswordlessPasskeysEnabled": true, "webAuthnPolicyPasswordlessUserVerificationRequirement": "required", "webAuthnPolicyPasswordlessRpEntityName": "Athletic Map", "otpPolicyType": "totp", "otpPolicyAlgorithm": "HmacSHA1", "otpPolicyDigits": 6, "otpPolicyPeriod": 30, "otpPolicyLookAheadWindow": 1, "otpPolicyCodeReusable": false, "browserFlow": "browser-2fa-dono", "authenticationFlows": [ { "alias": "browser-2fa-dono", "description": "Copia do browser padrao (26.7.5) com OTP obrigatorio para quem tem atm_admin", "providerId": "basic-flow", "topLevel": true, "builtIn": false, "authenticationExecutions": [ { "requirement": "ALTERNATIVE", "priority": 10, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "auth-cookie" }, { "requirement": "DISABLED", "priority": 20, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "auth-spnego" }, { "requirement": "ALTERNATIVE", "priority": 25, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "identity-provider-redirector" }, { "requirement": "ALTERNATIVE", "priority": 30, "userSetupAllowed": false, "authenticatorFlow": true, "flowAlias": "browser-2fa-dono-forms" } ] }, { "alias": "browser-2fa-dono-forms", "description": "Usuario e senha (ou passkey), e o segundo fator", "providerId": "basic-flow", "topLevel": false, "builtIn": false, "authenticationExecutions": [ { "requirement": "REQUIRED", "priority": 10, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "auth-username-password-form" }, { "requirement": "CONDITIONAL", "priority": 20, "userSetupAllowed": false, "authenticatorFlow": true, "flowAlias": "browser-2fa-dono-otp-obrigatorio" }, { "requirement": "CONDITIONAL", "priority": 30, "userSetupAllowed": false, "authenticatorFlow": true, "flowAlias": "browser-2fa-dono-2fa-opcional" } ] }, { "alias": "browser-2fa-dono-otp-obrigatorio", "description": "atm_admin: OTP obrigatorio (configura no 1o login); passkey dispensa", "providerId": "basic-flow", "topLevel": false, "builtIn": false, "authenticationExecutions": [ { "requirement": "REQUIRED", "priority": 10, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "conditional-user-role", "authenticatorConfig": "2fa-dono-papel-atm-admin" }, { "requirement": "REQUIRED", "priority": 20, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "conditional-credential", "authenticatorConfig": "2fa-dono-sem-passkey" }, { "requirement": "REQUIRED", "priority": 30, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "auth-otp-form" } ] }, { "alias": "browser-2fa-dono-2fa-opcional", "description": "Os demais: como o padrao (2FA so de quem configurou)", "providerId": "basic-flow", "topLevel": false, "builtIn": false, "authenticationExecutions": [ { "requirement": "REQUIRED", "priority": 10, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "conditional-user-configured" }, { "requirement": "REQUIRED", "priority": 20, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "conditional-credential", "authenticatorConfig": "2fa-opcional-sem-passkey" }, { "requirement": "REQUIRED", "priority": 30, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "conditional-user-role", "authenticatorConfig": "2fa-opcional-nao-dono" }, { "requirement": "ALTERNATIVE", "priority": 40, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "auth-otp-form" }, { "requirement": "DISABLED", "priority": 50, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "webauthn-authenticator" }, { "requirement": "DISABLED", "priority": 60, "userSetupAllowed": false, "authenticatorFlow": false, "authenticator": "auth-recovery-authn-code-form" } ] } ], "authenticatorConfig": [ { "alias": "2fa-dono-papel-atm-admin", "config": { "condUserRole": "atm_admin", "negate": "false" } }, { "alias": "2fa-dono-sem-passkey", "config": { "credentials": "webauthn-passwordless", "included": "false" } }, { "alias": "2fa-opcional-sem-passkey", "config": { "credentials": "webauthn-passwordless", "included": "false" } }, { "alias": "2fa-opcional-nao-dono", "config": { "condUserRole": "atm_admin", "negate": "true" } } ], "roles": { "realm": [ { "name": "admin" }, { "name": "atm_athlete" }, { "name": "atm_trainer" }, { "name": "atm_team_admin" }, { "name": "atm_fed_admin" }, { "name": "atm_admin" }, { "name": "atm_cadastro" }, { "name": "atm_financeiro" }, { "name": "atm_financeiro-leitura" }, { "name": "atm_responsavel", "description": "Responsavel legal (pai, mae ou outro): app dos pais e o portal web. Dado pelo cadastro ao marcar o acompanhante como responsavel (06/10/2026)." } ] }, "clients": [ { "clientId": "spa", "name": "Athletic Map SPA", "publicClient": true, "protocol": "openid-connect", "standardFlowEnabled": true, "implicitFlowEnabled": false, "directAccessGrantsEnabled": false, "redirectUris": [ "https://{{TENANT}}.athleticmap.com/*" ], "webOrigins": [ "https://{{TENANT}}.athleticmap.com" ], "attributes": { "pkce.code.challenge.method": "S256", "post.logout.redirect.uris": "https://{{TENANT}}.athleticmap.com/*" }, "protocolMappers": [ { "name": "funcionario_id", "protocol": "openid-connect", "protocolMapper": "oidc-usermodel-attribute-mapper", "consentRequired": false, "config": { "user.attribute": "funcionario_id", "claim.name": "funcionario_id", "jsonType.label": "String", "id.token.claim": "true", "access.token.claim": "true", "userinfo.token.claim": "true" } }, { "name": "acompanhante_id", "protocol": "openid-connect", "protocolMapper": "oidc-usermodel-attribute-mapper", "consentRequired": false, "config": { "user.attribute": "acompanhante_id", "claim.name": "acompanhante_id", "jsonType.label": "String", "id.token.claim": "true", "access.token.claim": "true", "userinfo.token.claim": "true" } } ] }, { "clientId": "app", "name": "Athletic Map App (mobile)", "publicClient": true, "protocol": "openid-connect", "standardFlowEnabled": true, "implicitFlowEnabled": false, "directAccessGrantsEnabled": false, "redirectUris": [ "com.athleticmap.app:/oauthredirect", "com.athleticmap.treinador:/oauthredirect", "com.athleticmap.dono:/oauthredirect", "com.athleticmap.pais:/oauthredirect", "http://127.0.0.1:8765/oauthredirect", "http://localhost:8765/oauthredirect", "https://{{TENANT}}.athleticmap.com/app/callback" ], "webOrigins": [ "https://{{TENANT}}.athleticmap.com", "http://127.0.0.1:8765", "http://localhost:8765" ], "attributes": { "pkce.code.challenge.method": "S256", "post.logout.redirect.uris": "com.athleticmap.app:/oauthredirect##com.athleticmap.treinador:/oauthredirect##com.athleticmap.dono:/oauthredirect##com.athleticmap.pais:/oauthredirect##http://127.0.0.1:8765/oauthredirect##http://localhost:8765/oauthredirect##https://{{TENANT}}.athleticmap.com/app/callback" }, "protocolMappers": [ { "name": "funcionario_id", "protocol": "openid-connect", "protocolMapper": "oidc-usermodel-attribute-mapper", "consentRequired": false, "config": { "user.attribute": "funcionario_id", "claim.name": "funcionario_id", "jsonType.label": "String", "id.token.claim": "true", "access.token.claim": "true", "userinfo.token.claim": "true" } }, { "name": "acompanhante_id", "protocol": "openid-connect", "protocolMapper": "oidc-usermodel-attribute-mapper", "consentRequired": false, "config": { "user.attribute": "acompanhante_id", "claim.name": "acompanhante_id", "jsonType.label": "String", "id.token.claim": "true", "access.token.claim": "true", "userinfo.token.claim": "true" } } ] } ], "attributes": { "frontendUrl": "https://auth.athleticmap.com" }, "smtpServer": { "host": "{{SMTP_HOST}}", "port": "{{SMTP_PORTA}}", "from": "{{SMTP_REMETENTE}}", "fromDisplayName": "Athletic Map", "replyTo": "{{SMTP_RESPONDER_PARA}}", "replyToDisplayName": "Athletic Map", "auth": "{{SMTP_AUTH}}", "user": "{{SMTP_USUARIO}}", "password": "{{SMTP_SENHA}}", "starttls": "{{SMTP_STARTTLS}}", "ssl": "false" }, "loginTheme": "athleticmap-v2", "emailTheme": "athleticmap-v2", "internationalizationEnabled": true, "defaultLocale": "pt-BR", "supportedLocales": [ "pt-BR" ] }