Pular para o conteúdo principal

Logout

O processo de logout no Logto (como um provedor de identidade baseado em OIDC) é um conceito multifacetado devido ao envolvimento tanto da sessão de login centralizada gerenciada pelo Logto quanto do status de autenticação distribuído gerenciado pelas aplicações cliente.

Sessão de login​

Para entender melhor o processo de logout, é importante primeiro entender como as sessões de login do usuário e seu status de autenticação são gerenciados no Logto.

  1. O usuário acessa a aplicação web (RP).
  2. A aplicação cliente redireciona o usuário para o Logto (IdP) para autenticação (Authentication).
  3. O provedor OIDC verifica o status da sessão de login do usuário. Se não houver sessão ou a sessão tiver expirado, o usuário é solicitado a fazer login.
  4. O usuário interage com a página de login para ser autenticado.
  5. Após o login bem-sucedido, o Logto cria uma nova sessão para o usuário e redireciona de volta para a aplicação cliente com um código de autorização.
  6. O provedor OIDC cria uma nova sessão de login e concessão de autenticação para o usuário.
  7. O provedor OIDC redireciona o usuário de volta para o cliente com um código de autenticação (Fluxo de Código de Autorização).
  8. O cliente recebe o código de autenticação e o troca por tokens para acessar as informações do usuário.
  9. Conceder tokens à aplicação cliente.

Componentes​

Sessão de login centralizada gerenciada pelo Logto​

No fluxo acima, a sessão de login centralizada é gerenciada pelo Logto. A sessão é criada quando o usuário faz login com sucesso e é destruída quando o usuário faz logout. A sessão também é destruída quando a sessão do usuário expira.

A sessão de login do Logto é gerenciada usando cookies de sessão. O cookie de sessão é definido quando o usuário faz login. Todas as solicitações de autenticação são validadas contra o cookie de sessão. Se o cookie de sessão estiver presente e válido, o usuário será automaticamente autenticado e redirecionado diretamente para a aplicação cliente com o código de autorização. Caso contrário, o usuário será solicitado a fazer login.

  1. Cookie de sessão compartilhado do Logto Para um usuário que faz login em várias aplicações cliente a partir do mesmo agente de usuário (por exemplo, navegador), o usuário terá um cookie de sessão compartilhado sob o domínio do Logto. Isso significa que o usuário só precisa fazer login uma vez e será automaticamente autenticado para outras aplicações cliente.

  2. Cookie de sessão isolado do Logto Para um usuário que faz login em diferentes aplicações cliente a partir de diferentes dispositivos ou navegadores, o usuário terá cookies de sessão isolados sob o domínio do Logto. Isso significa que o usuário precisa fazer login separadamente para cada aplicação cliente.

Status de autenticação distribuído gerenciado pelas aplicações cliente​

Cada aplicação cliente mantém seu próprio status de autenticação. Seja uma aplicação Nativa, SPA ou Web, todas têm sua própria maneira de gerenciar o status de autenticação do usuário.

Após o login bem-sucedido, a aplicação cliente pode receber um Token de ID (ID token) e um Token de acesso (Access token). A aplicação cliente pode usar o Token de ID para determinar a identidade do usuário e o Token de acesso para acessar os recursos do usuário. O status de autenticação do usuário é representado pelo tempo de expiração do Token de acesso.

  • Aplicações Nativas e SPA: A aplicação cliente precisa armazenar e gerenciar esses tokens de forma segura para manter o status de autenticação do usuário. Por exemplo, armazenar os tokens no armazenamento local ou de sessão e limpar os tokens quando o usuário fizer logout.
  • Aplicações Web: Aplicações web, como aquelas construídas com frameworks como Next.js, geralmente gerenciam sua própria sessão para usuários logados juntamente com os tokens emitidos pelo Logto. Uma vez que o usuário faz login e a aplicação web recebe os tokens do Logto, ela pode armazenar os tokens no lado do cliente, assim como as aplicações SPA, ou pode armazenar os tokens no lado do servidor e gerenciar a sessão usando cookies ou outros mecanismos.

Mecanismos de logout​

Limpar tokens e sessão local no lado do cliente​

No lado do cliente, um logout simples envolve limpar a sessão local e remover tokens (Token de ID, Token de acesso, Token de atualização) do armazenamento local ou de sessão. Isso resulta em um logout apenas no lado do cliente, onde a sessão centralizada permanece intacta. Usuários que fazem logout dessa maneira ainda podem acessar outras aplicações sob a mesma sessão do servidor de autorização até que a sessão centralizada expire ou seja ativamente destruída.

Limpar sessão de login no Logto​

Para explicitamente fazer logout do usuário e limpar a sessão no Logto, a aplicação cliente precisa redirecionar o usuário para o endpoint de término de sessão do Logto.

Por exemplo, https://{seu-domínio-logto}/oidc/session/end

O endpoint de término de sessão é um endpoint padrão do OIDC que permite que a aplicação cliente notifique o servidor de autorização que o usuário fez logout. O endpoint limpará a sessão de login centralizada no Logto.

Uma vez que a sessão é limpa, qualquer solicitação de autorização subsequente exigirá que o usuário faça login novamente.

Se um URI de redirecionamento pós-logout for fornecido, o usuário será redirecionado para o URI especificado após a sessão ser limpa. Caso contrário, o usuário será redirecionado para a página padrão de pós-logout hospedada pelo Logto.

Logout federado: Logout de back-channel​

Para um gerenciamento de logout mais consistente, o Logto suporta logout de back-channel. O logout de back-channel é um mecanismo que permite que o Logto notifique todas as aplicações cliente sob a mesma sessão de login quando o usuário faz logout.

Isso é particularmente útil em cenários onde o usuário faz logout de uma aplicação cliente e espera ser desconectado de todas as outras aplicações cliente sob a mesma sessão de login do Logto.

Para habilitar o logout de back-channel para suas aplicações cliente, vá para a página de detalhes da aplicação no painel do Logto e registre um URI de logout de back-channel. O Logto enviará um token de logout para todos os URI registrados quando o usuário iniciar uma solicitação de logout de qualquer aplicação cliente.

Se sua aplicação cliente exigir que a sessão de login seja incluída no token de logout, ative as configurações Is session required na configuração de logout de back-channel. Uma reivindicação sid será incluída no token de logout para identificar a sessão de login do usuário no Logto.

  1. O usuário inicia uma solicitação de logout de uma aplicação cliente.
  2. O Logto recebe a solicitação de término de sessão, gera um token de logout e envia o token de logout para todos os URI de logout de back-channel registrados.
  3. Cada aplicação cliente recebe o token de logout e executa ações de logout.

Ações de logout para cada aplicação cliente ao receber o token de logout:

  • Validar o token de logout.
  • Limpar a sessão local e remover tokens do armazenamento local ou de sessão.

Métodos de logout nos SDKs do Logto​

Se você estiver integrando o Logto com sua aplicação cliente usando os SDKs do Logto:

  • Para aplicações SPA e web, o método client.signOut() limpará o armazenamento local de tokens e redirecionará o usuário para o endpoint de término de sessão do Logto. Você pode especificar um URI de redirecionamento pós-logout para redirecionar o usuário após a sessão ser limpa.
  • Para aplicações nativas (incluindo aplicativos híbridos como React Native e Flutter), apenas o armazenamento local de tokens é limpo. Isso ocorre porque, em aplicações nativas, usamos o webview sem sessão para lidar com o processo de login. Nenhum cookie de sessão é armazenado no navegador nativo, portanto, não há necessidade de limpar a sessão de login no Logto. Cada solicitação de autenticação é uma solicitação independente que não carrega nenhum cookie de sessão.
nota:

Para aplicações nativas que não suportam webview sem sessão ou não reconhecem as configurações emphasized (aplicativo Android usando SDK React Native ou Flutter), você pode forçar o usuário a ser solicitado a fazer login novamente passando o parâmetro prompt=login na solicitação de autorização.

FAQs​

Não estou recebendo as notificações de logout de back-channel.​

  • Certifique-se de que o URI de logout de back-channel está corretamente registrado no painel do Logto.
  • Certifique-se de que sua aplicação cliente tem uma sessão de login ativa válida e é a mesma sessão que iniciou a solicitação de logout.

Entendendo o logout de back-channel do OIDC.