Pular para o conteúdo principal

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:

  1. signOut() redireciona para /session/end.
  2. Em seguida, vai para /session/end/confirm.
  3. 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.

nota:
  • 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_access não for concedido, as concessões relacionadas são revogadas.
    • Se offline_access for concedido, as concessões não são revogadas pelo encerramento da sessão.
  • 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_access for 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:

  1. O usuário inicia o logout de um aplicativo.
  2. 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).
  3. 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.
nota:

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.

Entendendo o logout back-channel OIDC.