Artigo original: Authentication vs Authorization – What's the Difference?

Quando você está começando no desenvolvimento para a web, provavelmente, ouvirá os termos autenticação e autorização o tempo todo. Não ajuda o fato de que ambos sejam geralmente abreviados como "auth". Então, é muito fácil confundir os dois.

Neste artigo, você aprenderá:

  • As diferenças entre autenticação e autorização
  • Como cada um desses processos funciona
  • Exemplos de autorização e autenticação na vida cotidiana.

‌‌‌‌Vamos começar.

O que é autenticação?

Autenticação é o processo de verificação das credenciais que um usuário fornece com aquelas armazenadas em um sistema para provar que o usuário é quem diz ser. Se as credenciais corresponderem, você concederá acesso. Se não, você nega.

Métodos de autenticação

Autenticação de fator único:

Isso, geralmente, é usado como processo de autenticação para sistemas de menor risco. Você só precisa de um único fator para autenticar, sendo o mais comum uma senha. Por isso, é mais vulnerável a ataques de phishing e keyloggers.

Além disso, um artigo (em inglês) recente da DataProt mostrou que 78% das pessoas da geração Z utilizam a mesma senha para vários serviços. Isso significa que, se um invasor obtiver acesso a uma conta de usuário, ele terá uma alta probabilidade de obter acesso a outros serviços simplesmente usando a mesma senha.

Autenticação de dois fatores:

Este método é mais seguro, pois compreende dois fatores de autenticação – normalmente, algo que você conhece – por exemplo, nome de usuário e senha, mais algo que você possui, por exemplo, um SMS de telefone ou um token de segurança.

Para a autenticação de dois fatores, você deve inserir uma senha SMS única enviada para o seu dispositivo, ou talvez um código de uma aplicação de autenticação vinculada e fornecer um código de acesso em constante mudança.

Como você pode imaginar, isso é muito mais seguro do que simplesmente inserir uma senha ou uma única credencial de autenticação. Você precisaria saber as credenciais de login, bem como ter acesso ao dispositivo físico para a segunda parte.

A autenticação de dois fatores tornou-se muito comum entre os serviços on-line nos últimos anos e, em muitas grandes empresas, é o método de autenticação padrão. Muitos exigem que você configure a autenticação de dois fatores para utilizar o serviço.

Autenticação multifator:

Dar um passo além para tornar seu processo de autenticação ainda mais seguro é ter 3 ou mais fatores. Esse modo de autenticação geralmente funciona com base em:

  • algo que você conhece (nome de usuário + senha ou um nome de usuário + pergunta e resposta de segurança)
  • algo que você tem (sms de celular, aplicação de autenticação, chave USB)
  • algo que você é (como uma impressão digital / reconhecimento facial)

Por esses motivos, a autenticação multifator oferece mais proteção, pois você precisaria de uma combinação dos vários fatores. Esses fatores são muito mais difíceis de "hackear" ou replicar.

A desvantagem desse método de autenticação e o motivo pelo qual não é utilizado em muitos sistemas comuns é que pode ser complicado de configurar e de manter. Portanto, os dados/sistema que você está protegendo realmente precisam justificar a necessidade de tal segurança.

Então, quanta informação você precisa para autenticar?

Essa pergunta surge em muitas reuniões de arquitetura de segurança e a resposta é: "depende".

Não é incomum que as empresas combinem vários métodos de autenticação para aumentar a segurança com base na natureza da aplicação.

Por exemplo, pegue uma aplicação bancária. Ela contém informações muito confidenciais e pode ter um grande impacto financeiro e de reputação se for obtido pela pessoa errada. O banco pode combinar perguntas pessoais a serem respondidas, juntamente com um número do cliente e uma senha complexa.

Por outro lado, para um site de mídia social, você pode exigir apenas um nome de usuário e senha, que são verificados antes de permitir o acesso.

Auth_Process-1

Tudo está relacionado ao nível de risco envolvido e a quais informações alguém pode acessar quando estiver na aplicação. Isso ajuda a determinar o nível de autenticação necessário.

Se você ou sua equipe subestimar o nível de autenticação que sua aplicação precisa, poderá ser processado por não proteger os dados em seu sistema adequadamente. Por isso, as empresas empregam especialistas em segurança para aconselhar sobre as melhores práticas e soluções adequadas.

Como funciona a autenticação no mundo real?

Vamos dar um exemplo de uma conta de mídia social. Você escolhe seu site de mídia social favorito (hospedado em um servidor). O servidor solicitará que você forneça credenciais para acessar o site por meio de uma página de login. Aqui, você digitaria seu nome de usuário e senha que você usou ao criar a conta.

server-process-2
Imagem mostrando o processo de autenticação

Esses detalhes são enviados ao servidor e o processo de autenticação é iniciado. Os detalhes que você forneceu são verificados e conferidos no banco de dados do servidor e, se corresponderem aos detalhes registrados, você será autenticado. Em seguida, você recebe uma espécie de dados de identificação, por exemplo, um cookie ou Json Web Token (token JWT).

Sucesso! Você acessou o site e recebeu direito de entrada.

Você pode aprender mais sobre os tokens JWT em outro artigo do FreeCodeCamp, de Beau Carnes, aqui (texto em inglês).

Em seguida, vamos ver a autorização.

O que é autorização?

Autorização é o processo de verificar se você tem permissão para acessar uma área de uma aplicação ou executar ações específicas, com base em determinados critérios e condições estabelecidos pela aplicação. Você também pode ouvi-lo ser chamado de controle de acesso ou controle de privilégio.

A autorização pode conceder ou negar permissão para realizar tarefas ou acessar áreas de uma aplicação.

Vejamos um exemplo:

Obtivemos acesso ao site de mídia social, mas o que podemos fazer lá depende do que estamos autorizados a fazer.

Se tentarmos acessar o perfil de alguém de quem não somos amigos (eles não aceitaram nosso pedido de conexão), não estamos autorizados a visualizar seu perfil. Isso significa que não temos permissão para visualizar suas postagens compartilhadas.

auth-process2-1
Imagem do fluxo de autorização

Como implementar autorização

Há muitas maneiras de implementar a autorização, dependendo dos frameworks que você está usando.

Dentro do .NET Framework, por exemplo, você pode usar controle de acesso baseado em função ou controle de acesso baseado em reivindicações.

O controle de acesso baseado em função é centrado na ideologia de que cada usuário em seu sistema recebe uma função. Essas funções têm permissões predefinidas associadas a elas. Receber uma função significa que o usuário herdará automaticamente todas essas permissões. As funções são atribuídas no momento da criação e configuração do usuário.

O endpoint ou site simplesmente verifica se o usuário conectado no momento tem a função de administrador ao tentar acessar a área de administração.

A desvantagem dessa abordagem é que, às vezes, os usuários recebem muitas permissões que não precisam ou não deveriam ter.

Por exemplo, atribuir a um usuário a função de Admin pode significar que ele teria privilégios de Advanced Create, Edit, Delete e View. Considerando que, você pode querer dar a ele apenas as permissões View e Basic Create.

O controle de acesso baseado em reivindicações pode permitir um ajuste mais fino das permissões de um usuário específico. A aplicação pode verificar se a reivindicação simplesmente existe em um usuário ou se um valor específico é atribuído à reivindicação.

Por exemplo, uma reivindicação chamada CreateUser pode ser fornecida a um usuário e isso é verificado ao criar um usuário. Ou você pode atribuir um valor de Advanced à mesma reivindicação e, em seguida, ter diferentes ações e interfaces de usuário disponíveis, dependendo se o valor for Advanced ou Basic.

Qual é a diferença entre autenticação e autorização?

Portanto, agora que entendemos melhor os termos, vamos ver um cenário com o qual você pode estar familiarizado e que envolve os dois processos.

Em um jantar com lista exclusiva de convidados, cada convidado recebe um apelido e uma senha secreta.

Na chegada, um guarda de segurança pede seu apelido e senha secreta. Ele, então, autentica suas credenciais na lista que possui. Se suas credenciais corresponderem, você receberá um envelope mostrando que foi autorizado a entrar.

Uma vez lá dentro, você tem permissão para acessar a festa e as áreas públicas do local, pois não precisam de autorização (todos têm permissão para aproveitar a festa). No entanto, você deseja visitar a área VIP.

Conforme você se aproxima, outro segurança pede para abrir seu envelope (suas permissões e funções). Ele dá uma olhada, mas, infelizmente, você não tem a função VIP e, portanto, não está autorizado a acessar. Simplificando, a autenticação verifica a identidade de um usuário ou serviço que permite o acesso, enquanto a autorização determina o que eles podem fazer depois de entrar.

Por que você deve implementar autenticação e autorização?

Como você pode ver, embora autenticação e autorização sejam muito diferentes, cada uma desempenha um papel integral na segurança e integridade da aplicação ou sistema.

Esses processos andam de mãos dadas e, sem um, o outro não tem sentido. Se você pode obter acesso à área de administração, mas fazer o que quiser uma vez lá, isso pode levar a grandes problemas.

Por outro lado, você não pode autorizar pessoas sem saber quem são! É por isso que a autenticação sempre vem antes da autorização.

Considerações finais

Espero que este artigo tenha sido esclarecedor e agora você tenha uma compreensão mais clara das diferenças entre autorização e autenticação e como usá-las.

Lembre-se:

  • Autenticação =  verificar a identidade de um usuário ou processo
  • Autorização = determinar se o usuário/sistema tem permissão para usar um recurso ou realizar uma ação

Sinta-se à vontade para entrar em contato via Twitter se desejar discutir este artigo com o autor em mais detalhes: @gweaths.