From 82eed86423593d0c99071120ee05ed5c798e8a4d Mon Sep 17 00:00:00 2001 From: deploy Date: Wed, 7 Oct 2026 20:59:30 +0000 Subject: [PATCH] chore(tenants): conteudo de publico/ atualizado --- moldes/consolidado/96-publico-configmap.yaml | 31 +++++++++++++++++--- tenants/plataforma/96-publico-configmap.yaml | 31 +++++++++++++++++--- 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/moldes/consolidado/96-publico-configmap.yaml b/moldes/consolidado/96-publico-configmap.yaml index 248ea63..c9edb1e 100644 --- a/moldes/consolidado/96-publico-configmap.yaml +++ b/moldes/consolidado/96-publico-configmap.yaml @@ -3782,7 +3782,7 @@ data: - + @@ -3940,7 +3940,9 @@ data: function usarTokens(d) { if (!d || !d.access_token) throw new Error("resposta sem token"); cred = { tipo: "login", acesso: d.access_token, - renovacao: d.refresh_token || (cred && cred.renovacao) || null }; + renovacao: d.refresh_token || (cred && cred.renovacao) || null, + // So para o "Sair" (id_token_hint): sem ele o Keycloak pede confirmacao numa tela fora do padrao. + identidade: d.id_token || (cred && cred.identidade) || null }; agendarRenovacao(Number(d.expires_in)); } @@ -4031,13 +4033,33 @@ data: naPorta("A sessão expirou. Entre de novo."); } + /* Saida por POST (07/10/2026): com o `id_token_hint` o Keycloak encerra a sessao sem a tela de + confirmacao. Vai no CORPO de um formulario, e nao na URL, para o token nao ficar no historico do + navegador nem em log de acesso. Exige `form-action` com o emissor na CSP do /painel-do-dono. */ + function sairPorFormulario(identidade) { + if (typeof window.__atmSairPorFormulario === "function") { window.__atmSairPorFormulario(identidade); return; } + var f = document.createElement("form"); + f.method = "POST"; + f.action = OIDC.EMISSOR + "/protocol/openid-connect/logout"; + var campos = { client_id: OIDC.CLIENTE, post_logout_redirect_uri: retorno(), id_token_hint: identidade }; + Object.keys(campos).forEach(function (k) { + var i = document.createElement("input"); + i.type = "hidden"; i.name = k; i.value = campos[k]; + f.appendChild(i); + }); + document.body.appendChild(f); + f.submit(); + } + function sairDoLogin() { + var identidade = cred && cred.identidade; cred = null; pararRenovacao(); esquecerSessao(); // Encerra tambem a sessao NO KEYCLOAK: limpar so daqui deixaria o proximo // "Entrar" passar direto, e quem clicou em sair esperava o contrario. - // Sem `id_token_hint` (seria token na URL): o Keycloak pede confirmacao. + if (identidade) { sairPorFormulario(identidade); return; } + // Sem id_token (nao deveria acontecer com o login): o Keycloak pede confirmacao. navegar(OIDC.EMISSOR + "/protocol/openid-connect/logout?" + new URLSearchParams({ client_id: OIDC.CLIENTE, post_logout_redirect_uri: retorno() }).toString()); } @@ -4971,7 +4993,8 @@ data: } function negar() { - cred = null; // o token dessa conta nao serve a esta tela + // O token dessa conta nao serve a esta tela; fica so o id_token, para o "Sair" encerrar sem confirmacao. + cred = cred && cred.identidade ? { tipo: "saida", identidade: cred.identidade } : null; pararRenovacao(); esquecerSessao(); mostrar(negado); diff --git a/tenants/plataforma/96-publico-configmap.yaml b/tenants/plataforma/96-publico-configmap.yaml index 38e8e3f..6033b00 100644 --- a/tenants/plataforma/96-publico-configmap.yaml +++ b/tenants/plataforma/96-publico-configmap.yaml @@ -3782,7 +3782,7 @@ data: - + @@ -3940,7 +3940,9 @@ data: function usarTokens(d) { if (!d || !d.access_token) throw new Error("resposta sem token"); cred = { tipo: "login", acesso: d.access_token, - renovacao: d.refresh_token || (cred && cred.renovacao) || null }; + renovacao: d.refresh_token || (cred && cred.renovacao) || null, + // So para o "Sair" (id_token_hint): sem ele o Keycloak pede confirmacao numa tela fora do padrao. + identidade: d.id_token || (cred && cred.identidade) || null }; agendarRenovacao(Number(d.expires_in)); } @@ -4031,13 +4033,33 @@ data: naPorta("A sessão expirou. Entre de novo."); } + /* Saida por POST (07/10/2026): com o `id_token_hint` o Keycloak encerra a sessao sem a tela de + confirmacao. Vai no CORPO de um formulario, e nao na URL, para o token nao ficar no historico do + navegador nem em log de acesso. Exige `form-action` com o emissor na CSP do /painel-do-dono. */ + function sairPorFormulario(identidade) { + if (typeof window.__atmSairPorFormulario === "function") { window.__atmSairPorFormulario(identidade); return; } + var f = document.createElement("form"); + f.method = "POST"; + f.action = OIDC.EMISSOR + "/protocol/openid-connect/logout"; + var campos = { client_id: OIDC.CLIENTE, post_logout_redirect_uri: retorno(), id_token_hint: identidade }; + Object.keys(campos).forEach(function (k) { + var i = document.createElement("input"); + i.type = "hidden"; i.name = k; i.value = campos[k]; + f.appendChild(i); + }); + document.body.appendChild(f); + f.submit(); + } + function sairDoLogin() { + var identidade = cred && cred.identidade; cred = null; pararRenovacao(); esquecerSessao(); // Encerra tambem a sessao NO KEYCLOAK: limpar so daqui deixaria o proximo // "Entrar" passar direto, e quem clicou em sair esperava o contrario. - // Sem `id_token_hint` (seria token na URL): o Keycloak pede confirmacao. + if (identidade) { sairPorFormulario(identidade); return; } + // Sem id_token (nao deveria acontecer com o login): o Keycloak pede confirmacao. navegar(OIDC.EMISSOR + "/protocol/openid-connect/logout?" + new URLSearchParams({ client_id: OIDC.CLIENTE, post_logout_redirect_uri: retorno() }).toString()); } @@ -4971,7 +4993,8 @@ data: } function negar() { - cred = null; // o token dessa conta nao serve a esta tela + // O token dessa conta nao serve a esta tela; fica so o id_token, para o "Sair" encerrar sem confirmacao. + cred = cred && cred.identidade ? { tipo: "saida", identidade: cred.identidade } : null; pararRenovacao(); esquecerSessao(); mostrar(negado);