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ção | Padrão | Faixa aceita | Onde |
|---|---|---|---|
| Sessão | 600 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.
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.
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_agedo 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:
| Erro | O que faltou |
|---|---|
login_required | Não há login reaproveitável. |
account_selection_required | Mais de uma conta poderia ser usada. |
interaction_required | A pessoa precisa responder algo antes, como termos ou um segundo fator. |
consent_required | O client pede um consentimento que ainda não foi dado. |
Consentimento
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=consentmostra 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
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.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âmetro | Para que serve |
|---|---|
id_token_hint | O ID token da sessão a encerrar. Necessário para encerrar qualquer coisa; um token vencido é aceito. |
post_logout_redirect_uri | Para onde voltar depois. Precisa ser exatamente uma redirect URI pós-logout registrada, ou uma redirect URI quando nenhuma estiver registrada. |
state | Devolvido sem alteração no redirecionamento. |
client_id | O client, quando o hint ainda não o informa. |
ui_locales, theme | Idioma e paleta das telas mostradas no caminho. |
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_hintválido, a sessão termina e o navegador volta para apost_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:
| Mecanismo | Como funciona | Regras do endereço |
|---|---|---|
| URI de logout por back-channel | O 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-channel | Num 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 acontece | O que termina |
|---|---|
| Logout, um administrador encerrando uma sessão, reuso de refresh token | A 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 client | Só as sessões dela naquele client. |
| Suspensão, desativação ou exclusão da conta | Todas 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.