O que é bom para a segurança definitiva da Web

Tanto o JWT quanto o OAuth podem ajudá-lo a aumentar a segurança do seu aplicativo Web, oferecendo autenticação e autorização seguras. Mas qual você deve implementar para permitir que os usuários acessem seu aplicativo da web com segurança? Preparamos um artigo detalhado sobre JWT vs. OAuth para responder a esta pergunta.

Depois de lê-lo, você terá uma ideia clara sobre o que são JWT e OAuth, quais benefícios eles oferecem, como se diferenciam e qual deles você deve implementar para aumentar a segurança de sua aplicação web.

Sem mais delongas, vamos mergulhar.

O que é um JWT?

JWT, que significa JSON Web Token, é um padrão aberto que define uma maneira de compartilhar informações com segurança entre duas partes como um objeto JSON. Como as informações são assinadas digitalmente, as partes podem confiar e verificar as informações transmitidas por meio de JSON Web Tokens.

Um tamanho relativamente pequeno de JWTs permite que eles sejam enviados por meio de um parâmetro POST, uma URL ou dentro de um cabeçalho HTTP. Um JSON Web Token tem três partes: cabeçalho, carga útil e assinatura.

O cabeçalho informa que tipo de token é e o tipo de algoritmo de assinatura que está sendo usado. A parte Payload de um JWT inclui declarações que são declarações sobre usuários e dados adicionais.

Como o nome indica, a parte Assinatura de um JSON Web Token possui a assinatura para verificar se a mensagem não foi moderada ao longo do caminho.

Como funcionam os JWTs

Fonte da imagem: DEV

Veja a seguir como funciona um JSON Web Token.

Login do usuário

Os usuários fazem login em seu aplicativo da web enviando seus nomes de usuário e senhas. Em seguida, seu aplicativo transfere essas credenciais de login para o servidor de autenticação.

Geração de tokens

Após o servidor de autenticação verificar as credenciais de login dos usuários, ele gera JSON Web Tokens e os envia aos usuários. Esses JWTs podem incluir informações críticas sobre usuários e sessões de autenticação. Os usuários armazenam esses JWTs localmente. Com base nas configurações, o servidor também pode assinar JWTs usando um segredo compartilhado ou uma chave privada para aumentar a segurança.

Verificação de token

Quando os usuários fazem solicitações ao seu servidor de aplicativos para acessar qualquer recurso, eles incluirão seus JWTs nas solicitações do servidor. Seu servidor de aplicativos verificará as assinaturas nos JWTs e as declarações nas cargas úteis para verificar se os usuários têm permissão para acessar os recursos solicitados.

Se os JWTs forem válidos, os usuários terão acesso aos recursos solicitados em seu aplicativo web.

Casos de uso de JWTs

Pode-se usar JSON Web Tokens das seguintes maneiras:

#1. Autorização

Depois que os usuários fizerem login com sucesso em seu aplicativo da web por meio do endpoint de login, o servidor de autenticação emitirá JWTs para eles. Os usuários utilizarão seus JWTs para acessar recursos da aplicação, que requerem autenticação para comprovar sua identidade.

Troca de informações entre as partes

JSON Web Token pode ser a opção certa para transmitir informações com segurança a usuários válidos. JSON Web Tokens são assinados para garantir que as informações venham da fonte original. Além disso, a estrutura do JWT (a parte da assinatura) permite que os receptores verifiquem se as informações não foram alteradas ao longo do caminho.

  6 Melhor servidor de jogos dedicado para jogadores e streamers

Benefícios dos JWTs

A seguir estão os principais benefícios da implementação de JWTs em seu aplicativo da web.

  • Ao contrário dos tokens SAML, os JWTs são leves. Assim, você pode implementá-los rapidamente em ambientes HTML e HTTPP, tornando os JWTs ideais para aplicativos clientes, como aplicativos móveis.
  • JWTs oferecem segurança robusta. Você pode assinar JWTs simetricamente por meio de um segredo compartilhado usando o algoritmo HMAC ou uma chave privada para assiná-los assimetricamente.
  • Os JWTs vêm com um mecanismo de expiração integrado, permitindo definir o período de expiração dos JWTs para aumentar a segurança.
  • JSON Web Tokens são amplamente adotados por diferentes soluções de Single Sign-On. Como resultado, é fácil trabalhar com JWT.

Além disso, os JWTs podem economizar espaço de armazenamento de banco de dados em sua empresa. Isso ocorre porque seu servidor cria apenas JWTs e eles são salvos no lado do cliente. Além disso, os JWTs não exigem uma pesquisa no banco de dados.

Assim, os JWTs podem ser verificados rapidamente, oferecendo uma experiência de usuário superior.

Limitações dos JWTs

Embora os JWTs sejam uma excelente forma de autorizar usuários. Eles têm certas limitações, como:

  • Você é responsável por garantir a segurança da chave de criptografia. Se um hacker colocar as mãos na chave que assina seus JWTs, você estará em apuros. Eles poderiam criar tokens falsos que mexem com os dados do usuário. Isso é um enorme risco de segurança.
  • Os JWTs não precisam de uma chamada de banco de dados para cada verificação, o que parece bom. Mas se precisar revogar um o mais rápido possível, você terá que colocá-lo na lista negra. Essa não é uma tarefa rápida ou simples.
  • Quando um JWT expira, não é apenas uma questão de estender o cronômetro. Seu sistema solicitará que o usuário faça login novamente para obter um novo token. Isso adiciona complexidade a todo o processo, exigindo mais reflexão sobre a experiência do usuário e os fluxos de segurança. Para facilitar o processo, você pode implementar tokens de atualização em combinação com JWTs. Quando o token de acesso expirar, os clientes poderão usar esses tokens de atualização para solicitar novos tokens de acesso sem que o cliente envie novamente as credenciais de login.
  • Implementar JWTs em sua aplicação web não é uma tarefa simples; requer trabalho extra de engenharia. Você precisará configurar o processo de criação de token, escolher o mecanismo de assinatura correto para sua aplicação e integrar tudo isso à sua arquitetura existente.

Os JWTs não são uma solução de uma etapa, mas sim um projeto que precisa de planejamento e execução cuidadosos.

O que é OAuth?

OAuth, abreviação de autorização aberta, é um protocolo de autorização padrão aberto para autorização. Ele permite que aplicativos da web ou sites acessem recursos hospedados por aplicativos de terceiros em nome de usuários, sem que os usuários compartilhem credenciais de login para aplicativos de terceiros.

Agora, escrito como OAuth 2.0 (a versão mais recente do OAuth), é amplamente utilizado para autenticar usuários por meio de um servidor de autenticação.

Por exemplo, com o OAuth implementado, os usuários podem fazer login no seu aplicativo com suas contas do Facebook ou Google. Mas eles inserirão suas credenciais de login apenas nas contas do Facebook ou Google.

Como funciona o OAuth

Fonte da imagem: Zoho

  Como desativar convites para páginas, eventos e boletins informativos no LinkedIn

Por exemplo, você tem um aplicativo de gerenciamento de tempo. E para permitir que qualquer pessoa use seu aplicativo com eficiência, você precisa acessar suas caixas de entrada de e-mail. Antigamente, os usuários tinham que compartilhar suas credenciais de login com seu aplicativo para permitir que o aplicativo acessasse suas caixas de entrada. OAuth2.0 resolveu esse problema.

Esta é a aparência do fluxo de trabalho do OAuth2.0:

  • Seu aplicativo de gerenciamento de tempo (o cliente) solicita acesso a recursos protegidos; neste caso, é a caixa de entrada do usuário, de propriedade do usuário (proprietário do recurso). Seu aplicativo faz isso enviando o usuário ao endpoint autorizado.
  • O proprietário do recurso (usuário) autentica e autoriza a solicitação de acesso ao recurso do aplicativo de gerenciamento de tempo. O cliente (seu aplicativo) receberá uma concessão de autorização do endpoint autorizado.
  • Seu aplicativo solicitará um token de acesso do servidor de autorização para acessar a caixa de entrada do usuário. Fá-lo-á submetendo a concessão de autorização e com autenticação de identidade própria.
  • Se a identidade do seu aplicativo for autenticada e a concessão de autorização for válida, seu aplicativo receberá um token de acesso para acessar a caixa de entrada do usuário.
  • Se o token de acesso for válido, seu aplicativo agora poderá acessar os dados do usuário (caixa de entrada do usuário) enviando o token de acesso para autenticação.
  • Agora, seu aplicativo de gerenciamento de tempo pode acessar a caixa de entrada do usuário. Como Oauth tem vários tipos de subsídioso fluxo de autorização pode diferir ligeiramente com base nos tipos de concessão de autorização.

    Benefícios do OAuth

    A seguir estão os principais benefícios do uso do OAuth.

    • OAuth é um padrão amplamente aceito. Isso significa que todos os principais serviços de autenticação entendem e usam o OAuth.
    • Os usuários encontrarão muitos plug-ins e recursos OAuth para escolher, graças ao seu amplo uso e compatibilidade.
    • OAuth oferece bibliotecas de clientes testadas para quase todas as linguagens de programação e estruturas da web. Assim, você pode usar seu idioma preferido com OAuth.
    • OAuth é altamente seguro e bem avaliado. Por ser tão amplamente utilizado, os especialistas já consideraram todos os possíveis riscos de segurança.
    • OAuth é ótimo para dissociação de código. O código principal do seu aplicativo não fica confuso ao lidar com tarefas de autenticação. Isso torna mais fácil gerenciar e atualizar seu aplicativo a longo prazo.

    Casos de uso de OAuth

    A seguir estão alguns casos de uso populares de OAuth:

    • O uso mais comum do OAuth 2.0 é fazer com que aplicativos de terceiros acessem as contas dos usuários. Com o OAuth 2.0, os usuários podem autorizar terceiros a acessar seus dados armazenados em diferentes serviços sem fornecer a terceiros as credenciais de login para esses serviços.
    • Como proprietário de um aplicativo Web, você pode empregar o OAuth 2.0 para implementar o logon único. Você pode explorar essas soluções OAuth de código aberto para o seu projeto.
    • Você pode implementar o OAuth 2.0 em seu gateway de API para fazer com que o gateway de API atue como um servidor de autorização. Isso garantirá que o gateway da API encaminhe solicitações de clientes com tokens de acesso válidos.
    • OAuth 2.0 pode capacitar a IoT e dispositivos inteligentes, como geladeiras ou TVs, para interagir com APIs de terceiros em nome dos usuários. Isso é útil quando um usuário deseja fazer login em um aplicativo em dispositivos sem um teclado normal, como uma smart TV ou console de jogos.

    Limitações do OAuth

    A variedade de fluxos disponíveis pode ser assustadora para quem é novo no OAuth. Não se trata apenas de escolher um; às vezes, você precisa de uma combinação para atender a todos os seus requisitos de segurança. Essa complexidade pode tornar difícil para os iniciantes saberem por onde começar, o que usar e como integrá-lo de forma eficaz.

      Vê isto! Ajuda a encontrar filmes para assistir com base na classificação e no gênero

    Cada fluxo atende a um propósito exclusivo, seja para aplicativos móveis, comunicação entre servidores ou aplicativos da web. Portanto, analisar cuidadosamente suas necessidades específicas é essencial antes de fazer uma escolha.

    OAuth 2.0 depende de SSL/TLS para manter tudo seguro. Se o SSL/TLS não estiver configurado corretamente, a segurança do OAuth 2.0 poderá estar em risco.

    Além disso, o OAuth pode levantar questões de privacidade, principalmente ao rastrear a atividade do usuário. Quando você usa um serviço como “Faça login com o Google”, o Google pode tomar conhecimento de sua atividade nesse site de terceiros. O Google pode não apenas saber que você está conectado, mas também rastrear com que frequência e quando você interage com esse site.

    Além disso, o OAuth pode ser um exagero para configurações mais simples, como um aplicativo com apenas um front-end e um back-end. Talvez você não precise de suas complexidades nesses casos.

    Diferença entre JWTs e OAuth

    JWTs e OAuth cumprem a função crucial de verificar a identidade do usuário para autorizar o acesso aos recursos. São ferramentas essenciais no cenário de segurança, mas diferem em escopo, complexidade e aplicação.

    RecursosJWTsOAuthUso principalJWTs se concentram principalmente em APIs.OAuth cobre web, navegador, API e outros aplicativos.Token vs. armazenamento no lado do servidor.Flexibilidade Os JWTs têm escopo mais limitado.OAuth oferece mais flexibilidade e uma gama mais ampla de casos de uso. Facilidade de uso JWTs são mais simples e fáceis de entender. OAuth é mais complexo.

    Embora os JWTs sejam mais simples e voltados para a segurança da API, o OAuth fornece uma solução abrangente de mecanismo de autenticação que pode se adaptar a vários cenários.

    E o OAuth pode permitir que os usuários permitam que um aplicativo de terceiros acesse seus dados em outra plataforma sem revelar seus detalhes de login.

    A melhor opção depende das necessidades específicas do sistema ou rede em questão.

    Você pode usar JWT e OAuth juntos?

    Embora JWTs e OAuth tenham finalidades diferentes, você pode combiná-los.

    O protocolo OAuth não especifica nenhum formato de token que deva ser usado estritamente. Assim, você pode implementar JWTs no OAuth.

    Por exemplo, o servidor de autenticação OAuth2 pode emitir um token de acesso com JWTs. E este JWT poderia incluir informações adicionais na carga útil, melhorando o desempenho. Isso ocorre porque haverá viagens de ida e volta reduzidas entre os servidores de autenticação e de recursos.

    A combinação de JWTs e OAuth2 também pode acontecer por meio de uma abordagem de token duplo — o OAuth2 emite dois tokens separados neste método: um access_token e um JWT. O JWT contém informações adicionais de identidade. Essa abordagem fornece uma camada extra de detalhes, proporcionando mais controle sobre o acesso e os dados do usuário.

    É crucial usar o OpenID Connect ao optar por esta estratégia de token duplo. O OpenID Connect baseia-se no OAuth2 e adiciona campos mais padronizados aos tokens.

    Usar JWTs em vez de OAuth2 pode tornar as coisas mais rápidas e menos complexas para tarefas específicas. Mas também pode tornar o desenvolvimento mais desafiador.

    Ao decidir usar JWT com OAuth2, considere se o aumento de velocidade justifica o trabalho adicional no desenvolvimento.

    Conclusão

    Na batalha entre JWT e OAuth pela segurança definitiva da Web, cada um tem méritos e desvantagens. O JWT se destaca pela autenticação rápida e sem estado, mas tem limitações como a falta de revogação integrada. OAuth é excelente em cenários de autorização complexos, mas pode ser um exagero para projetos mais simples.

    Se você precisar de autorização robusta e autenticação eficiente, considere combinar JWT e OAuth por meio do OpenID Connect.

    Sua escolha deve depender das necessidades específicas do seu projeto, não apenas do entusiasmo em torno dessas tecnologias.

    Além disso, você pode explorar essas plataformas populares de autenticação de usuário para escolher a melhor solução para seu aplicativo.