OpenID vs OAuth

Zhihuang Lin

Zhihuang Lin

July 3, 2024

Technology

Para garantir a segurança das informações do usuário e permitir que aplicativos de terceiros acessem recursos restritos, duas tecnologias principais surgiram: OpenID Connect e OAuth. Embora essas duas sejam frequentemente discutidas juntas, elas diferem fundamentalmente em seu posicionamento funcional e objetivos principais.

Especificamente, o OAuth é focado na construção de um framework de autorização, com o objetivo principal de conceder a aplicativos de terceiros a permissão para acessar recursos específicos, sem envolver diretamente a verificação da identidade do usuário. Em contraste, o OpenID Connect é precisamente posicionado como um serviço de autenticação de identidade, preenchendo a lacuna que o OAuth tem no domínio do reconhecimento de identidade e garantindo a autenticidade e confiabilidade das identidades dos usuários.

Neste blog, vamos nos aprofundar na essência, mecanismos de operação, cenários de aplicação típicos e a relação sutil, mas íntima, entre o OpenID Connect e o OAuth.

O que é OpenID Connect?

OpenID Connect (OIDC) é um protocolo de autenticação baseado no framework OAuth 2.0, que estende a funcionalidade do OAuth ao introduzir o conceito de um token de ID. O OIDC não apenas permite que os usuários autorizem aplicativos de terceiros a acessar seus recursos, mas também fornece a verificação das informações de identidade do usuário, permitindo o acesso seguro a vários serviços usando uma única credencial de login.

Em comparação com o OAuth 2.0, a principal diferença do OIDC é a adição da camada de autenticação, enquanto o OAuth 2.0 se concentra principalmente na autorização, permitindo que os usuários controlem as permissões de acesso de aplicativos de terceiros aos seus recursos, sem envolver a verificação específica da identidade do usuário.

O processo de autenticação do OpenID Connect:

  1. Acesso ao aplicativo: Quando um usuário deseja usar um aplicativo ou serviço, se o aplicativo precisar verificar a identidade do usuário, ele será direcionado ao provedor de serviços de autenticação de identidade, o OpenID Connect provider (OP), para fazer login.

  2. Login do usuário: O usuário insere seu nome de usuário e senha (ou passa por outros mecanismos de autenticação suportados pelo OP) na interface de login do OP. Após o login bem-sucedido, o provedor OpenID Connect confirmará a identidade do usuário.

  3. Emissão do token de ID: Após confirmar a identidade do usuário, o provedor OpenID Connect gerará um token especial chamado token de ID. Esse token contém informações de identidade do usuário, como nome de usuário, endereço de e-mail e outros dados importantes, garantindo a representação digital e a transmissão da identidade do usuário.

  4. Uso do token de ID: Após obter o token de ID, o usuário pode apresentá-lo ao aplicativo que desejava acessar anteriormente. O aplicativo então ativará o mecanismo de verificação para verificar o token e confirmar que ele foi emitido por um provedor OpenID Connect confiável e que não expirou.

  5. Acesso ao aplicativo: Após o aplicativo verificar a validade do token de ID, ele permitirá que o usuário acesse os recursos ou serviços protegidos. Dessa forma, o usuário não precisa se registrar e fazer login em cada aplicativo separadamente, mas pode usar o token de ID emitido pelo provedor OpenID Connect.

  6. Garantia de segurança: O OpenID Connect usa a tecnologia avançada JSON Web Token (JWT) para gerar e verificar os tokens, mitigando efetivamente os riscos de adulteração e roubo de dados. Além disso, o OpenID Connect também suporta de forma flexível vários modos de autenticação e autorização, como o modo de código de autorização, modo implícito e modo híbrido, para se adaptar aos requisitos de segurança de diferentes cenários.

O que é OAuth?

Em resumo, o OAuth é um protocolo que permite que aplicativos de terceiros acessem recursos sensíveis armazenados pelo usuário (como bibliotecas de fotos, listas de contatos, etc.) em outro serviço, sem acessar diretamente as credenciais de login do usuário (nome de usuário e senha). Esse mecanismo é mais voltado para "autorização" do que para "autenticação".

Por exemplo, se você deseja usar sua conta do Google para fazer login em um aplicativo de notícias, o aplicativo pode usar o OAuth para solicitar suas informações públicas (como avatar e apelido) de sua conta do Google, sem que você precise fornecer diretamente o nome de usuário e senha da conta do Google ao aplicativo de notícias.

O processo de autorização do OAuth:

  1. Solicitação de autorização do usuário: Suponha que você esteja usando um aplicativo social que deseja acessar informações de sua conta em outra rede social. No entanto, essas informações são protegidas, portanto, é necessária autorização.

  2. Redirecionamento para o servidor de autorização: O aplicativo de terceiros redirecionará sua solicitação para uma página no servidor de autorização, que normalmente solicitará que você faça login no serviço que deseja autorizar.

  3. Login e autorização do usuário: Na página do servidor de autorização, você precisa fazer login com sua conta. Após o login, a página perguntará se você concorda em permitir que o aplicativo de terceiros acesse suas informações.

  4. Emissão do token de acesso pelo servidor de autorização: Se você concordar, o servidor de autorização gerará um "passe" especial chamado token de acesso. Esse token é como um passe de entrada temporário que permite que o aplicativo de terceiros acesse suas informações por um período de tempo.

  5. Uso do token de acesso pelo aplicativo de terceiros: Após obter o token de acesso, o aplicativo de terceiros pode usar esse token para solicitar suas informações por um período de tempo. Cada vez que fizer uma solicitação, ele precisará apresentar esse token para provar que foi autorizado por você.

  6. Verificação do token pelo servidor de autorização e retorno do recurso: Quando o aplicativo de terceiros apresentar o token de acesso ao servidor de autorização que armazena suas informações, o servidor de autorização verificará se o token é válido. Se for válido, ele permitirá que o aplicativo de terceiros acesse as informações correspondentes com base nas permissões do token.

Ao adotar a abordagem do OAuth, não apenas a segurança da sua conta é muito aumentada, pois elimina a necessidade de revelar diretamente seu nome de usuário e senha ao aplicativo de terceiros, mas também fornece um mecanismo de autorização flexível que permite que você decida de forma independente quais aplicativos podem acessar quais de suas informações, alcançando assim um controle preciso sobre o fluxo de suas informações pessoais.

As Diferenças e Conexões entre OpenID Connect e OAuth

As diferenças e conexões entre OpenID Connect e OAuth são particularmente vívidas em aplicações práticas. Suponha que haja um site de animais de estimação online chamado "Paraíso dos Pets", onde os clientes podem comprar suprimentos para animais de estimação, e a loja de animais também fornece um aplicativo de rastreamento de saúde dos pets, onde os clientes podem registrar os dados de saúde de seus animais, como peso, dieta e status de vacinação.

Aplicação do OpenID Connect neste caso de uso:

  1. Autenticação: Quando os clientes visitam o site "Paraíso dos Pets" pela primeira vez ou baixam e usam o aplicativo de rastreamento de saúde dos pets, eles precisam se registrar e fazer login. Para fornecer uma experiência de login conveniente, a loja de animais decide usar o OpenID Connect para implementar o single sign-on (SSO).

  2. Token de ID: Os clientes podem usar suas credenciais de outros serviços que suportam OpenID Connect (como contas de mídia social) para fazer login. Após o login bem-sucedido, o provedor OpenID Connect emitirá um token de ID para o cliente. Esse token contém as informações de identidade do cliente e é criptografado e assinado.

  3. Autenticação entre serviços: Se o cliente posteriormente visitar outros serviços da loja de animais (por exemplo, do site para o aplicativo), ele pode usar diretamente o token de ID obtido anteriormente para autenticação, sem precisar reinserir o nome de usuário e senha. Isso permite que o cliente mude de forma contínua entre diferentes serviços.

Aplicação do OAuth neste caso de uso:

  1. Autorização de aplicativo de terceiros: Suponha que o "Paraíso dos Pets" queira colaborar com um aplicativo de terceiros chamado "Diário dos Pets" e permitir que os clientes sincronizem seus registros de compras de suprimentos para animais e dados de saúde dos pets do "Paraíso dos Pets" para o "Diário dos Pets".

  2. Token de acesso: Para alcançar essa funcionalidade, o "Paraíso dos Pets" usará o OAuth para autorizar o aplicativo "Diário dos Pets" a acessar os dados do cliente. Após o cliente concordar com a autorização no site do "Paraíso dos Pets", um token de acesso será gerado por meio do fluxo do OAuth, que permitirá que o aplicativo "Diário dos Pets" acesse os dados específicos do cliente no "Paraíso dos Pets".

  3. Proteção dos dados do usuário: Por meio do OAuth, as credenciais de login do cliente (nome de usuário e senha) não serão expostas diretamente ao aplicativo "Diário dos Pets", mas serão compartilhadas de forma segura por meio do token de acesso. Dessa forma, mesmo que o aplicativo "Diário dos Pets" seja atacado, o invasor não poderá obter diretamente as credenciais de login do cliente.

Resumo

Em resumo, as diferenças e associações entre OAuth e OpenID Connect podem ser resumidas da seguinte forma.

  1. Base e Extensão:

    • O OAuth é um framework de autorização que permite que aplicativos de terceiros obtenham permissões de acesso limitadas sem usar o nome de usuário e senha do usuário.
    • O OpenID Connect, por outro lado, se baseia no OAuth 2.0 e estende sua funcionalidade ao adicionar uma camada de autenticação.
  2. Tokens e Autenticação:

    • No OAuth, o foco principal é a autorização, ou seja, permitir que aplicativos acessem os recursos do usuário, enquanto o OpenID Connect é mais focado na autenticação, ou seja, confirmar a identidade do usuário.
    • O OpenID Connect introduz o conceito de token de ID, que é um JSON Web Token (JWT) contendo as informações de identidade do usuário. Esse token não apenas prova a identidade do usuário, mas também pode incluir informações do perfil pessoal do usuário.
  3. Colaboração:

    • Quando um aplicativo precisa verificar a identidade do usuário e acessar os recursos do usuário, o OpenID Connect e o OAuth podem trabalhar juntos.
    • O usuário primeiro autentica sua identidade por meio do OpenID Connect, obtendo um token de ID, e então o aplicativo pode usar esse token e o fluxo do OAuth para obter permissão para acessar os recursos do usuário.

Em resumo, o OpenID Connect e o OAuth são dois protocolos complementares de autenticação e autorização de identidade que, juntos, fornecem uma solução segura, flexível e amigável ao usuário para autenticação e autorização em aplicativos web e móveis modernos.

Tags: