Português (Brasil)
  • OIDC
  • SSO
  • autenticação

Implementando logout e gerenciamento de sessão OIDC: Um guia completo

Explore a autenticação OIDC e o gerenciamento de sessão em profundidade. Aprenda a implementar o logout iniciado pelo RP, pelo IdP e no canal de retorno para o manuseio seguro de sessões.

Simeng
Simeng
Developer

O que é gerenciamento de sessão OIDC

OpenID Connect (OIDC) é uma camada de identidade simples construída sobre o protocolo OAuth 2.0. Ele permite que os clientes verifiquem a identidade do usuário final com base na autenticação realizada pelo servidor de autorização, bem como obtenham informações básicas do perfil do usuário final de maneira interoperável e similar a REST.

O OIDC é projetado para ser fácil de usar e implementar, com foco na simplicidade e flexibilidade. É amplamente utilizado para single sign-on (SSO) e verificação de identidade em aplicativos web, aplicativos móveis e APIs.

Compreender o status de autenticação e o gerenciamento de sessão no OIDC é crucial. Este artigo explica como as sessões OIDC e o status de autenticação do usuário são gerenciados no contexto de interações entre o Identity Provider (IdP) e o Relying Party (RP) ou Service Provider (SP).

Este artigo inclui vários termos-chave.

  • Identity Provider (IdP): O serviço que armazena e autentica identidades de usuários.
  • Service Provider (SP) ou Relaying Party (RP): Um aplicativo web ou serviço que fornece serviços aos usuários e depende do IdP para autenticar os usuários.
  • Sessão de login ou Sessão de autenticação: A sessão que é estabelecida quando um usuário faz login no IdP.
  • Concessão: As informações centralizadas de autenticação e autorização do usuário que são geradas e gerenciadas pelo IdP.
  • Single Sign-On (SSO): Um serviço de sessão e autenticação de usuário que permite que um usuário use um conjunto de credenciais de login (por exemplo, nome e senha) para acessar vários aplicativos.

Como funciona o fluxo de autenticação OIDC

Para entender melhor o gerenciamento de sessão e status de autenticação de usuário OIDC, vamos revisar brevemente o fluxo de autenticação OIDC para um aplicativo web:

  1. O usuário acessa o aplicativo web (RP).
  2. O RP redireciona o usuário para o provedor OIDC (IdP) para autenticação.
  3. O provedor OIDC verifica o status da sessão de login do usuário. Se nenhuma sessão existir ou se a sessão tiver expirado, solicita que o usuário faça login.
  4. O usuário interage com a página de login para se autenticar.
  5. A página de login envia o resultado da interação para o provedor OIDC.
  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 RP com um código de autenticação (fluxo de Código de Autorização).
  8. O RP recebe o código de autenticação e o troca por tokens para acessar informações do usuário.

O que é gerenciamento de sessão de login RP

Uma sessão de login é estabelecida quando um usuário faz login no IdP. Esta sessão é usada para rastrear o status de autenticação do usuário no IdP. A sessão normalmente inclui informações como a identidade do usuário, hora da autenticação e tempo de expiração da sessão. Ela é criada quando o usuário faz login pela primeira vez e é mantida até que o usuário faça logout ou a sessão expire.

Um cookie de sessão será configurado com segurança no navegador do usuário para manter o estado da sessão. O cookie de sessão é usado para identificar a sessão do usuário e autenticar o usuário para solicitações de autenticação subsequentes. Este cookie geralmente é configurado com as flags HttpOnly e Secure para impedir o acesso do lado do cliente e garantir comunicação segura.

Uma sessão para um único RP

Para cada RP que o usuário acessar de dispositivos ou navegadores diferentes, uma sessão de login separada do usuário será estabelecida. Isso significa que o status de autenticação do usuário é mantido separadamente para cada RP. Se o usuário fizer logout de um RP, ele ainda estará autenticado em outros RPs até que a sessão expire ou o usuário faça logout de todos os RPs.

Sessão centralizada para múltiplos RPs

Este gerenciamento de sessão centralizado também permite que o IdP mantenha um estado de autenticação consistente em várias RPs, desde que a sessão do usuário esteja ativa e as solicitações de autenticação venham do mesmo agente do usuário (dispositivo/navegador). Este mecanismo habilita capacidades de SSO, onde o usuário pode acessar várias RPs sem precisar fazer login novamente.

Status de autenticação do lado do cliente

No OIDC, o aplicativo cliente (RP) depende dos tokens emitidos pelo IdP para verificar a identidade do usuário e o status de autenticação ou autorização. A "sessão de login" do lado do cliente é mantida pelos tokens emitidos pelo IdP.

  • ID Token: Um token de curta duração que contém informações do usuário e é usado para verificar a identidade do usuário autenticado.
  • Access Token: Um token que concede acesso a recursos protegidos em nome do usuário. O tempo de vida do access token pode ser de curta duração ou longa, dependendo da configuração. Os aplicativos cliente podem confiar na validade do access token para determinar o status de autenticação do usuário. Se o access token estiver expirado ou desmarcado, o usuário pode ser considerado como "desconectado" ou "não autenticado" e precisará se autenticar novamente.
  • Refresh Token: Se o escopo offline_access for solicitado e concedido, o aplicativo cliente pode receber um refresh token. Ele fornece um meio de estender o status de autenticação do usuário sem exigir que o usuário se autentique novamente. O aplicativo cliente pode usar o refresh token para obter um novo access token quando o access token atual expirar. Enquanto o refresh token for válido, o status de autenticação do usuário pode ser mantido sem a necessidade de interação do usuário.

A combinação desses tokens permite que o aplicativo cliente mantenha o status de autenticação do usuário e acesse recursos protegidos em nome do usuário. O aplicativo cliente precisa armazenar esses tokens com segurança e gerenciar seu ciclo de vida. (Por exemplo, para aplicativos SPA, os tokens podem ser armazenados no armazenamento local ou de sessão do navegador. Para aplicativos web, os tokens podem ser armazenados em dados de sessão do lado do servidor ou cookies.)

Mecanismos de logout OIDC

O processo de logout no OIDC é um conceito multifacetado devido ao envolvimento tanto de sessões de login centralizadas gerenciadas pelo IdP quanto de tokens do lado do cliente distribuídos.

Limpar tokens e sessão local no lado do cliente

Para sair ou revogar o status de autenticação de um usuário no lado do cliente é relativamente simples. O aplicativo cliente pode remover tokens armazenados (ID token, access token e refresh token) do navegador ou da memória do usuário. Esta ação efetivamente invalida o status de autenticação do usuário no lado do cliente.

Para aplicativos web que gerenciam suas próprias sessões de login de usuário, etapas adicionais podem ser necessárias. Essas incluem limpar o cookie de sessão e qualquer dado de sessão (como tokens emitidos pelo Identity Provider ou IdP) para garantir que o usuário esteja totalmente desconectado.

Limpar sessão de login centralizada no IdP

O IdP mantém uma sessão de login centralizada para cada usuário. Enquanto essa sessão estiver ativa, o usuário pode ser automaticamente reautenticado mesmo que os tokens do lado do cliente tenham sido limpos, permitindo que novos tokens sejam emitidos para o aplicativo cliente sem exigir interação adicional com o IdP.

Para desconectar totalmente um usuário do IdP, o aplicativo cliente (RP) pode iniciar uma solicitação de logout para o IdP. O aplicativo (RP) deve redirecionar o usuário para o endpoint de finalização de sessão do IdP para terminar a sessão de login e limpar os cookies de sessão. Isso garante um logout completo em todos os aplicativos (RPs) que compartilham a mesma sessão centralizada. Uma vez que a sessão de login é terminada, sempre que o IdP receber uma solicitação de token de qualquer RP vinculado que compartilha a mesma sessão, o IdP solicitará que o usuário se reautentique.

Logout no canal de retorno OIDC

Em alguns casos, quando um usuário faz logout de um aplicativo (RP), ele pode também querer ser desconectado automaticamente de todos os outros aplicativos (RPs) sem qualquer interação adicional do usuário. Isso pode ser realizado usando o mecanismo de logout no canal de retorno.

Quando o IdP recebe uma solicitação de logout de um RP, ele não apenas limpa a sessão de login, mas também envia uma notificação de logout no canal de retorno para todos os RPs que usam a mesma sessão e têm um endpoint de logout no canal de retorno registrado.

Quando os RPs recebem a notificação de logout no canal de retorno, eles podem executar as ações necessárias para limpar a sessão e os tokens do usuário, garantindo que o usuário esteja totalmente desconectado de todas as aplicações.