Logout
O logout no Logto (como um provedor de identidade OIDC) envolve ambos:
- Uma sessão centralizada do Logto (cookie do navegador sob o domínio do Logto), e
- Estado de autenticação distribuído no lado do cliente (tokens e sessão local do app em cada aplicativo).
Para entender o comportamento de logout, ajuda separar essas duas camadas e depois ver como os grants as conectam.
Conceitos principais
O que é uma sessão do Logto?
Uma sessão do Logto é o estado centralizado de login gerenciado pelo Logto. Ela é criada após uma autenticação bem-sucedida e representada por cookies sob o domínio do Logto.
Se o cookie de sessão for válido, o usuário pode ser autenticado silenciosamente (SSO) em vários aplicativos que confiam no mesmo tenant do Logto.
Se não existir uma sessão válida, o Logto exibe a página de login.
O que são grants?
Um grant representa o status de autorização para uma combinação específica de usuário + aplicativo cliente.
- Uma sessão do Logto pode ter grants para vários aplicativos clientes.
- Um grant é o que associa os tokens emitidos.
- Neste conjunto de documentação, use grant como a unidade de autorização entre aplicativos.
Como sessão, grants e status de autenticação do cliente se relacionam
- Sessão do Logto controla a experiência centralizada de SSO.
- Sessão/tokens locais do cliente controlam se cada app atualmente trata o usuário como autenticado.
- Grants conectam esses dois mundos representando o estado de autorização específico do app.
Recapitulação do login (por que o logout é multi-camadas)
Topologia de sessão entre apps/dispositivos
Cookie de sessão compartilhado (mesmo navegador/agente de usuário)
Se um usuário faz login em vários apps a partir do mesmo navegador, esses apps podem reutilizar o mesmo cookie de sessão do Logto e o comportamento de SSO se aplica.
Cookies de sessão isolados (diferentes dispositivos/navegadores)
Navegadores/dispositivos diferentes mantêm cookies do Logto diferentes, então o estado da sessão de login é isolado.
Mecanismos de logout
1) Logout apenas no lado do cliente
O app cliente limpa sua própria sessão local e tokens (tokens de ID / acesso / atualização). Isso faz o logout do usuário apenas do estado local desse app.
- A sessão do Logto pode ainda estar ativa.
- Outros apps sob a mesma sessão do Logto ainda podem usar SSO.
2) Encerrar sessão no Logto (logout global na implementação atual do Logto)
Para limpar a sessão centralizada do Logto, o app redireciona o usuário para o endpoint de encerramento de sessão, por exemplo:
https://{seu-domínio-logto}/oidc/session/end
No comportamento atual do SDK do Logto:
signOut()redireciona para/session/end.- Depois vai para
/session/end/confirm. - O formulário de confirmação padrão faz auto-post com
logout=true.
Como resultado, o logout pelo SDK atual é tratado como logout global.
O que acontece durante o logout global
Durante o logout global:
- A sessão centralizada do Logto é revogada.
- Grants relacionados aos apps são tratados conforme o estado de autorização do app:
- Se
offline_accessnão for concedido, os grants relacionados são revogados. - Se
offline_accessfor concedido, os grants não são revogados pelo encerramento de sessão.
- Se
- Para casos de
offline_access, tokens de atualização e grants permanecem válidos até a expiração do grant.
Tempo de vida do grant e impacto do offline_access
- O TTL padrão do grant do Logto é 180 dias.
- Se
offline_accessfor concedido, o encerramento de sessão não revoga esse grant do app por padrão. - A cadeia de tokens de atualização associada a esse grant pode continuar até o grant expirar (ou ser explicitamente revogado).
Logout federado: logout back-channel
Para consistência entre apps, o Logto suporta logout back-channel.
Quando um usuário faz logout de um app, o Logto pode notificar todos os apps participantes da mesma sessão enviando um token de logout para o URI de logout back-channel registrado de cada app.
Se Is session required estiver habilitado nas configurações de back-channel do app, o token de logout inclui sid para identificar a sessão do Logto.
Fluxo típico:
- O usuário inicia o logout em um app.
- O Logto processa o encerramento de sessão e envia token(s) de logout para os URIs de logout back-channel registrados.
- Cada app valida o token de logout e limpa sua própria sessão/tokens locais.
Métodos de logout nos SDKs do Logto
- SPA e web:
client.signOut()limpa o armazenamento local de tokens e redireciona para o endpoint de encerramento de sessão do Logto. Você pode fornecer um URI de redirecionamento pós-logout. - Nativo (incluindo React Native / Flutter): normalmente limpa apenas o armazenamento local de tokens. Webview sem sessão significa que não há cookie persistente do Logto no navegador para limpar.
Para aplicativos nativos que não suportam webview sem sessão ou não reconhecem as configurações emphasized (aplicativo Android usando React Native ou Flutter SDK), você pode forçar o prompt de login novamente passando o parâmetro prompt=login na solicitação de autenticação.
Forçar reautenticação a cada acesso
Para ações de alta segurança, inclua prompt=login nas solicitações de autenticação para ignorar o SSO e forçar a entrada de credenciais toda vez.
Se solicitar offline_access (para receber tokens de atualização), inclua também consent, prompt=login consent.
Configuração típica combinada:
prompt=login consent
Perguntas frequentes
Não estou recebendo as notificações de logout back-channel.
- Certifique-se de que o URI de logout back-channel está corretamente registrado no painel do Logto.
- Certifique-se de que seu app tem um estado de login ativo para o mesmo contexto de usuário/sessão.
Recursos relacionados
Entendendo o logout back-channel do OIDC.