Logout
O logout no Logto envolve duas camadas:
- Logout da sessão Logto: Encerra a sessão centralizada de login sob o domínio Logto.
- Logout do aplicativo: Limpa o estado da sessão local e os tokens em seu aplicativo cliente.
Para entender melhor como as sessões funcionam no Logto, veja Sessões.
Mecanismos de logout
1) Logout apenas no lado do cliente
O aplicativo 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 aplicativo.
- A sessão Logto pode ainda estar ativa.
- Outros aplicativos sob a mesma sessão 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 aplicativo redireciona o usuário para o endpoint de encerramento de sessão, por exemplo:
https://{your-logto-domain}/oidc/session/end
No comportamento atual do SDK Logto:
signOut()redireciona para/session/end.- Em seguida, vai para
/session/end/confirm. - O formulário de confirmação padrão faz auto-post de
logout=true.
Como resultado, o logout do SDK atual é tratado como logout global.
- Logout global: Revoga a sessão centralizada do Logto.
O que acontece durante o logout global
Durante o logout global:
- A sessão centralizada do Logto é revogada.
- As concessões relacionadas ao aplicativo são tratadas conforme o estado de autorização do aplicativo:
- Se
offline_accessnão for concedido, as concessões relacionadas são revogadas. - Se
offline_accessfor concedido, as concessões não são revogadas pelo encerramento da sessão.
- Se
- Para casos de
offline_access, os tokens de atualização e concessões permanecem válidos até o primeiro dos seguintes: expiração da concessão, expiração do token de atualização ou revogação explícita.
Tempo de vida da concessão e impacto do offline_access
- O TTL padrão da concessão Logto é 180 dias.
- Se
offline_accessfor concedido, o encerramento da sessão não revoga essa concessão do aplicativo por padrão. - As cadeias de tokens de atualização associadas a essa concessão podem continuar até que a concessão expire, o token de atualização expire ou a concessão seja explicitamente revogada.
- Para aplicativos de página única (SPAs), a rotação do token de atualização não estende o TTL do token de atualização, então o token de atualização pode expirar antes da concessão.
Logout federado: logout back-channel
Para consistência entre aplicativos, o Logto suporta logout back-channel.
Quando um usuário faz logout de um aplicativo, o Logto pode notificar todos os aplicativos participantes da mesma sessão enviando um token de logout para o URI de logout back-channel registrado de cada aplicativo.
Se Is session required estiver habilitado nas configurações de back-channel do aplicativo, o token de logout inclui sid para identificar a sessão Logto.
Fluxo típico:
- O usuário inicia o logout de um aplicativo.
- O Logto processa o encerramento da sessão e envia o(s) token(s) de logout para o(s) URI(s) de logout back-channel registrado(s).
- Cada aplicativo valida o token de logout e limpa sua própria sessão / tokens locais.
Métodos de logout nos SDKs 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 navegador Logto 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 para o usuário passando o parâmetro prompt=login na solicitação de autorizaçã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 a cada vez.
Se solicitar offline_access (para receber tokens de atualização), inclua também consent, prompt=login consent.
Configuração combinada típica:
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 aplicativo tem um estado de login ativo para o mesmo contexto de usuário / sessão.
Recursos relacionados
Entendendo o logout back-channel OIDC.