Pular para o conteúdo

Sessões e SSO

Quanto tempo as pessoas ficam conectadas, como um login vale para vários clients, as telas de consentimento e termos e como o logout chega a todas as aplicações.

Todo login abre uma sessão: um registro no servidor, ligado a um client e a um navegador, que todo token emitido depois cita. Encerrar a sessão faz esses tokens pararem no próximo uso, mesmo que ainda não tenham expirado. Em volta disso ficam quatro decisões que você toma por client: quanto as sessões duram, se são compartilhadas com outros clients, se a pessoa precisa consentir ou aceitar termos e como as suas aplicações ficam sabendo de um logout.

Duração da sessão e Continuar conectado

Quanto uma sessão dura é o tempo de sessão do client, que também define por quanto tempo os ID tokens dele valem:

ConfiguraçãoPadrãoFaixa aceitaOnde
Sessão600 minutos (10 horas)1 a 525.600 minutos (um ano)Client, Editar, Segurança, tempos de vida dos tokens

Na tela de login, Continuar conectado decide o que acontece quando o navegador fecha. Marcado, o cookie da sessão é persistente e sobrevive a um reinício do navegador; desmarcado, ele termina quando o navegador fecha.

Single sign-on

Com o single sign-on, quem entrou em um client do realm entra em outro sem digitar as credenciais de novo. Ele é opcional por client e vem desligado: duas aplicações que por acaso dividem um realm não dividem logins a menos que você decida.

  1. Ligue em cada client que deve compartilhar

    Em Clients, abra o client, escolha Editar e, em Configuração, na seção Quem pode entrar, ligue Single sign-on (SSO). Faça isso em todos os clients participantes: um login só passa entre clients que tenham os dois o SSO ligado.

  2. Decida se o seletor de contas aparece sempre

    Sempre pedir a conta no SSO mostra o seletor mesmo quando só uma conta está conectada. Deixe desligado para entrar direto com essa conta.

Se um login pode ser reaproveitado é decidido de novo a cada pedido, nunca a partir do que valia quando ele foi feito. Ele só é reaproveitado quando:

  • A conta está ativa e não suspensa, e a senha não mudou desde então.
  • A conta pode entrar no client de destino — com Restringir a contas vinculadas ligado, ela precisa estar vinculada a ele.
  • O login atende ao max_age do pedido.
  • Não falta nada do que o client de destino exige, como um segundo fator que ele pede e o login original não apresentou.

Uma sessão aberta por single sign-on informa o login original em auth_time, amr e acr, nunca um novo, e sempre termina com o navegador: um Continuar conectado escolhido em outra aplicação não é herdado.

O seletor de contas

Um navegador lembra os logins recentes no realm, esquecendo primeiro o mais antigo. O login hospedado mostra Escolha uma conta, com Continuar como … para cada uma e Usar outra conta, quando:

  • Mais de uma conta poderia entrar no client.
  • O pedido traz prompt=select_account.
  • O client tem Sempre pedir a conta no SSO ligado, a menos que o pedido seja silencioso ou traga um login_hint.

Pedidos silenciosos

Um pedido com prompt=none nunca mostra tela. Quando não dá para respondê-lo com a sessão existente, ele volta à sua redirect URI com um erro que diz o que faltou:

ErroO que faltou
login_requiredNão há login reaproveitável.
account_selection_requiredMais de uma conta poderia ser usada.
interaction_requiredA pessoa precisa responder algo antes, como termos ou um segundo fator.
consent_requiredO client pede um consentimento que ainda não foi dado.

Ligue Pedir consentimento na Configuração do client quando a aplicação deve pedir permissão antes de receber os dados da pessoa — em geral, uma aplicação de terceiros. Vem desligado, o que serve para as suas próprias aplicações.

  • A tela lista os escopos pedidos, com nomes legíveis para os padrão (profile, email, phone, address, offline_access) e a sua descrição para os escopos próprios. A pessoa escolhe Permitir ou Não permitir.
  • Ela aparece no primeiro login e de novo só quando é pedido um escopo ainda não concedido. O consentimento só cresce: um pedido menor não retira nada.
  • prompt=consent mostra a tela em qualquer client, independentemente do que foi concedido.
  • Recusar não grava nada e devolve access_denied à redirect URI.

As pessoas veem e removem o que concederam na aba Aplicações das páginas da conta; remover o acesso também encerra as sessões delas naquela aplicação. Administradores encontram a mesma lista na aba Acesso do usuário, em Usuários.

Termos de uso

  1. Publique os documentos e uma versão

    Na Configuração do client, em Termos de uso, preencha a URL dos termos de serviço, a URL da política de privacidade e a Versão dos termos (até 64 caracteres, por exemplo 2026-09). Os links abrem em nova aba a partir da tela de termos.

  2. Ligue a etapa de termos

    Em Tela de login, ligue o aceite de termos. Ele é sempre pedido logo depois do login, antes do consentimento.

A pessoa marca Li e aceito os termos e escolhe Aceitar e continuar, ou Recusar, que devolve access_denied à sua aplicação. Cada aceite é gravado com a versão, os links mostrados, o endereço IP e o navegador. Mudar a versão faz toda conta aceitar de novo no próximo login.

Logout

Para desconectar alguém, envie o navegador ao endpoint de encerramento de sessão do realm (OpenID Connect RP-Initiated Logout):

ParâmetroPara que serve
id_token_hintO ID token da sessão a encerrar. Necessário para encerrar qualquer coisa; um token vencido é aceito.
post_logout_redirect_uriPara onde voltar depois. Precisa ser exatamente uma redirect URI pós-logout registrada, ou uma redirect URI quando nenhuma estiver registrada.
stateDevolvido sem alteração no redirecionamento.
client_idO client, quando o hint ainda não o informa.
ui_locales, themeIdioma e paleta das telas mostradas no caminho.
sign-out.tsTypeScript
const ISSUER = 'https://authio.api.hyperio.tech/realms/acme'

export function signOutUrl(idToken: string, state: string): string {
  const url = new URL(ISSUER + '/protocol/openid-connect/logout')
  url.searchParams.set('id_token_hint', idToken)
  url.searchParams.set('post_logout_redirect_uri', 'http://localhost:3000/')
  url.searchParams.set('state', state)

  return url.toString()
}
  • Com um id_token_hint válido, a sessão termina e o navegador volta para a post_logout_redirect_uri.
  • Sem ele, nada termina: a pessoa vê Você quer sair? e decide, e o endereço de retorno é ignorado. Qualquer página pode apontar para o endpoint, então nenhum logout acontece sem prova.
  • Um endereço de retorno não registrado não é seguido: a pessoa fica em Você saiu, que avisa que o endereço não está registrado.

Avisar as suas aplicações

Uma sessão pode terminar sem a sua aplicação participar: outra aplicação fez logout, um administrador a encerrou, uma suspensão começou. Para ficar sabendo, registre um endereço de logout na Configuração do client:

MecanismoComo funcionaRegras do endereço
URI de logout por back-channelO Authio envia, a partir dos servidores dele, um logout_token assinado sempre que uma sessão do client termina, por qualquer motivo. Entregas que falham são repetidas em até 6 tentativas, com intervalo crescente até 6 horas.https absoluto (http só em loopback), sem fragmento, até 2.048 caracteres.
URI de logout por front-channelNum logout pelo navegador, o Authio carrega o endereço num frame oculto; Exige o emissor e o ID da sessão acrescenta iss e sid a ele.http ou https absoluto, sem fragmento, até 2.048 caracteres.

O logout token tem typ logout+jwt no cabeçalho e traz iss, aud, sub, sid, jti e events; ele vale por dois minutos. Prefira o back-channel quando puder: navegadores que bloqueiam cookies de terceiros podem impedir que um frame de front-channel limpe o seu cookie.

Encerrar sessões

O que aconteceO que termina
Logout, um administrador encerrando uma sessão, reuso de refresh tokenA sessão e, se ela veio do single sign-on, o login compartilhado com todas as sessões que ele abriu em outros clients.
A sua aplicação revoga um token (RFC 7009)Só a sessão daquele client. O login compartilhado continua, então a pessoa pode voltar por ele.
A pessoa remove o acesso de uma aplicação, ou perde o acesso a um clientSó as sessões dela naquele client.
Suspensão, desativação ou exclusão da contaTodas as sessões da conta.

Onde as sessões aparecem e são encerradas:

  • A própria pessoa: a aba Sessões das páginas da conta e a aba Segurança do app do Authio.
  • Administradores: Sessões lista todas as sessões abertas dos realms em escopo, com filtros, encerramento em lote e encerramento do login compartilhado por trás de uma sessão; a aba Atividade de cada usuário e a de cada client mostram as deles.

As sessões ficam num armazenamento com expiração, então essas telas mostram o que está aberto agora. Os logins passados ficam no log de acesso.

Próximos passos

Cookies de analytics

Gostaríamos de medir como o console é usado, com o Google Analytics, para enxergar em quais telas as pessoas travam. Isso grava um cookie que reconhece este navegador na sua próxima visita.

Recusar não muda mais nada. Os cookies que mantêm você conectado e lembram o seu idioma e o seu tema são necessários para o console funcionar, e ficam de qualquer forma. Ler a Política de Privacidade