Creators
5
min de leitura
22 de março de 2022

OAuth: uma rápida visão geral

Danilo Amaral
Technical Customer Success Manager
Eu ajudo os clientes a alcançar o resultado desejado.
Mais sobre o autor

OAuth é de longe o protocolo de autorização mais amplamente utilizado em aplicações web. Se você faz parte deste mundo de integrações, é praticamente impossível não ter lidado com ele. É por isso que decidi criar este conteúdo e compartilhar parte da imersão que fiz ao longo dos últimos meses. 

O que é OAuth?

É um protocolo de autorização onde, de forma simples e padronizada, permite que o client (aplicações) acesse um recurso protegido em nome do usuário. É um framework de segurança que descreve como conceder acesso aos dados dos usuários em uma aplicação, através do protocolo HTTP.

Roles

São os papéis que cada entidade terá durante um fluxo de autorização. Os principais são:

  • Resource Owner: Entidade capaz de autorizar acesso a um recurso protegido. Se for uma pessoa, pode ser chamado de usuário final.
  • Resource Server: Servidor que hospeda os recursos protegidos. Por exemplo uma API.
  • Authorization Server: Ou OAuth Server, é o servidor que fornece acesso a um recurso protegido em nome do usuário. É onde são validados os fluxos e gerados os tokens.
  • Client: Aplicação que deseja acessar os recursos privados do resource owner.

Grant Types

São os fluxos de autorização utilizados para autorizar um client a acessar recursos privados do resource server em nome do resource owner. No OAuth 2.0, são contemplados 4 grant types:

  • Client Credentials;
  • Authorization Code;
  • Implicit Flow;
  • Password Grant.

Bearer Tokens

É um tipo de token de acesso. É uma string opaca, ou seja, sem informações autocontidas. Ele pode ser passado via header em uma requisição HTTP (forma mais comum). Caso seja utilizado método POST, pode ser passado no body da requisição, ou caso seja utilizado método GET na query string. Ex token: c0ce7f40-e12b-393e-bb7c-5ad1fc3c9841.

JWT

JSON Web Tokens além de serem um tipo de token de acesso, são também uma string. Contudo, se diferencia do bearer token, pois ele contém informações autocontidas e deve ser assinado e criptografado. É um token transparente. É estruturado em 3 partes. Header, que é informado o algoritmo de criptografia utilizado e o tipo do token. O payload, que é o dado propriamente dito, onde são passadas informações relevantes (claims) e nunca sensíveis, e a calda que é onde o mesmo é verificado e assinado. Vejam o exemplo abaixo:

Nenhum texto alt previsto para esta imagem

OAuth 2.1

O OAuth 2.0 é de 2012 (RFC 6749), e de lá pra cá muita coisa mudou. Popularização do javascript, diversos tipos de ataques, injeções e formas de interceptação e muito mais. Sendo assim, algumas mudanças foram necessárias e é por isso que existe o projeto OAuth 2.1 (RFC pendente até o momento dessa publicação). As principais mudanças são:

  • Fluxo Authorization Code com PKCE(RFC 7636)
  • Descontinuação dos fluxos Implicit e Password
  • Não passar o token na query string (apenas no header ou no body de um POST)

Então formulando, os grant types do OAuth 2.1 são Client Credentials e Authorization Code + PKCE. E o token (seja opaco ou transparente) passa-lo apenas via header ou no body de uma requisição POST:

Nenhum texto alt previsto para esta imagem

Na segunda parte veremos como funciona o fluxo Client Credentials e Authorization Code + PKCE, qual fluxo é recomendado utilizar para determinado tipo de aplicação e mais.  

Obrigado por ler e nos vemos em breve!

Obrigado pela leitura!