O avanço e a popularização das tecnologias abriu aos usuários a possibilidade de navegar livremente pela internet, podendo contratar e utilizar diversos serviços remotamente por exemplo. Assim, tornou-se fundamental investir em estratégias que possam adicionar maior segurança e confidencialidade nos métodos de identificação dos usuários (ALVES et al., 2017). Através de processos de autenticação e autorização pode-se proteger o acesso a um determinado recurso, estabelecendo regras e permissões que podem variar dependendo de quem o requisita, e para isso existem padrões e protocolos que especificam a melhor forma de projetar estas etapas do sistema, como gerenciar a identidade, mover dados pessoais com segurança e decidir quem pode acessar aplicativos e dados.
Autenticação
A autenticação é o processo através do qual um requerente prova quem afirma ser, ou seja, se verifica e confirma a autenticidade do usuário (RAHMAN; SHUVA; ALI, 2016). Neste processo, usualmente feito antes da autorização, o usuário é “desafiado” através de senhas ou até reconhecimento facial, de forma que sua identidade seja validada. A autenticação é um pré-requisito para o acesso aos recursos de um sistema e permite que as aplicações e serviços permaneçam confiáveis, impedindo acessos não autorizados. A autenticação pode se enquadrar em três categorias que respondem a três questionamentos “What you know”, “What you have” e “What you are”, respectivamente, são elas:
- Single-Factor Authentication depende de um único fator, podendo ser senha, código, PIN, etc..
- Two-Factor Authentication requer dois fatores para o sistema permitir o acesso a algum serviço, indo além de apenas nome de usuário e senha.
- Multi-Factor Authentication (MFA) exige a utilização de dois ou mais fatores de segurança de categorias independentes. Esta categoria usualmente utiliza reconhecimento facial, impressão digital, leitura de íris ou reconhecimento de voz.
Autorização
Uma vez que o usuário já foi autenticado, a autorização é o método que determina o que o mesmo pode ou não acessar dentro do sistema. Este processo é redigido por meio de policies, rules e definição de roles, utilizadas para decidir qual o nível de acesso atribuído a um usuário autenticado para um recurso (DOULIGERIS; SERPANOS, 2007).
Autenticação vs. Autorização
Em poucas palavras, a autenticação verifica quem é o usuário enquanto a autorização verifica ao que ele tem acesso. A Tabela a seguir apresenta as principais diferenças entre os dois processos:
AUTENTICAÇÃO | AUTORIZAÇÃO |
Determina se o usuário é quem afirma ser | Determina o que o usuário pode ou não acessar |
Desafia o usuário a validar suas credenciais | Verifica se o acesso é permitido através de políticas e regras |
Geralmente feito antes da autorização | Geralmente feito após autenticação bem sucedida |
Geralmente transmite informações por meio de um ID Token | Geralmente transmite informações por meio de um Access Token |
Geralmente regido pelo protocolo OpenID Connect (OIDC) | Geralmente regido pela estrutura OAuth 2.0 |
Exemplo: funcionários de uma empresa são obrigados a se autenticar por meio da rede antes de acessar o email da empresa | Exemplo: depois do funcionário se autenticar, o sistema determina quais informações o mesmo tem permissão para acessar |
Tokens
O token é um objeto composto por informações, o qual sozinho não possui significado, porém quando utilizado em conjunto com um sistema de Autenticação Baseado em Token (Token Based Authentication) funciona garantindo que todas as solicitações feitas a um determinado servidor sejam acompanhadas por um token assinado e válido. Os principais tipos de tokens são:
- ID Token: possui informações do usuário autenticado, e as utiliza inclusive para personalizar a experiência do mesmo. É utilizado somente pelo Client App que requisitou a autenticação.
- Access Token: são utilizados a cada request como credenciais para informar ao serviço requisitado que o portador do token foi previamente autorizado a acessar a API e executar um conjunto de ações.
Na Prática
A seguir está apresentado o fluxo de autenticação e autorização por meio de token entre Usuário, Client App, Auth Server e um Web Service (API).

Conclusões
Boas práticas de segurança tornam-se cada vez mais indispensáveis no desenvolvimento de um projeto de software. Identificar o usuário, validar suas credenciais e restringir seu acesso a determinados recursos é o ponto de partida para diminuir riscos e possíveis falhas que possam comprometer a integridade do sistema, além de proporcionar uma melhor experiência a quem o utiliza.
Autor: Gustavo Sachet
Referências:
ALVES, Késia Cristina. O impacto do registro digital nos processos de legalização de empresas nos escritórios de contabilidade da cidade de Uberlândia. 2017. 27 f. Trabalho de Conclusão de Curso (Graduação em Ciências Contábeis) – Universidade Federal de Uberlândia, 2017.
AUTH0. Authentication vs. Authorization. Disponível em: https://auth0.com/docs/get-started/authentication-and-authorization#authentication-vs-authorization. Acesso em: 29 set. 2021.
AUTH0. Authorization code flow. Disponível em: https://auth0.com/docs/authorization/flows/authorization-code-flow#how-it-works. Acesso em: 29 set. 2021.
AUTH0. Tokens. Disponível em: https://auth0.com/docs/security/tokens. Acesso em: 29 set. 2021.
DOULIGERIS, Christos; SERPANOS, Dimitrios N. Network Security: Current Status and Future Directions. Wiley-Ieee Press, 2007. 592 p.
RAHMAN, Md. Tanvir; SHUVA, Taslima Ferdaus; ALI, K. M. Akkas. Trusted Device along with Trusted Location and Biometry based Authentication Method. International Journal Of Computer Applications, v. 150, n. 4, p. 26-30, set. 2016.