Eu conheci OAuth quando trabalhava como desenvolvedor web, onde desenvolvi uma integração com algumas redes sociais como Facebook, Twitter e (o falecido) Google+ para uma seção de comentários. Se você não sabia, OAuth está por trás de todo “Sign in with” que você vê na web!
OAuth é um padrão de autorização (não confunda com autenticação!), onde o dono do recurso (você), autoriza o cliente (um app ou site qualquer) a acessar suas informações no servidor dos dados (a rede social, por exemplo). Para isso, o app ou site precisa solicitar uma chave de acesso (access token) no servidor de autorização, que você provavelmente teve que aprovar antes. Não vou entrar em mais detalhes porque há muitos recursos na internet, mesmo em português, então dá um Google aí pra saber mais :)
Entender como o padrão funciona pode ser um tanto complicado no início. Por isso, neste artigo, vou listar 7 pontos em que OAuth se parece com o sistema de acesso de hotéis. Sim! O sistema com cartões magnéticos é a analogia perfeita e vai te ajudar a entender melhor cada ator e operação envolvida!
Agora, imagine que você está de férias e viajou até o seu destino dos sonhos. Você chegou no hotel e… vamos lá!
1. Você obtém um cartão de acesso autenticando na recepção
Quando você chega no hotel, você vai até a recepção, apresenta um documento de identificação e recebe um cartão de acesso.
Em OAuth, a aplicação redireciona o usuário para o servidor de autorização, onde ele se autentica e uma chave de acesso é emitida. Aqui os passos podem ser um pouco diferentes dependendo do fluxo (ou “grant type”), mas em geral é assim mesmo.
2. Um cartão de acesso pode ser usado por qualquer um que o possua
Se você dá seu cartão para um amigo, ele poderá acessar o seu quarto normalmente. Em OAuth é a mesma coisa! Qualquer cliente com posse da chave de acesso poderá requisitar dados. Por isso que as chaves de acesso são chamadas de Bearer Tokens - “bearer” significa “portador”, ou seja, o portador da chave pode usar a API, por exemplo, independente de quem seja.
O sistema do hotel não vai verificar se é você mesmo que está abrindo determinada porta, por isso, você deve guardar e cuidar do seu cartão. Do mesmo jeito, a aplicação deve guardar a chave de uma forma segura e, preferencialmente, enviá-la através de HTTPS para que ninguém a intercepte no meio do caminho.
3. Um cartão de acesso pode ser cancelado a qualquer momento
Se você perder seu cartão ou for expulso do hotel por fazer muito barulho, seu cartão será cancelado e não servirá mais para abrir a porta do seu quarto. Neste caso, você só poderá obter um novo cartão apresentando-se na recepção novamente.
Em OAuth, o servidor de autorização pode anular uma chave de acesso em qualquer momento por diferentes razões. Muitos servidores de OAuth irão fornecer um meio dos usuários visualizarem e revogarem as aplicações que possuem acesso aos seus dados. O servidor também pode revogar as chaves caso a aplicação tenha sido desativada ou o usuário encerrou sua conta.
4. Um cartão de acesso não tem significado para quem está usando
Quando você obtém seu cartão na recepção, você não se preocupa se o cartão usa tecnologia RFID, NFC ou outra coisa. Você só quer saber de passar o cartão na porta e esperar que ela abra.
Uma chave de acesso em OAuth é vista da mesma forma pela aplicação que está utilizando-a. A chave em si pode ser opaca, pode ser um JSON Web Token (JWT) ou até uma implementação proprietária, mas o que importa é que ela possa ser usada para autenticar a chamada de API.
5. O cartão de acesso não precisa conter seu nome
O cartão de acesso precisa conter informações sobre quais portas ele pode abrir e o tempo de expiração da visita, mas não precisa saber seu nome ou qualquer informação pessoal sua.
Chaves de acesso OAuth podem funcionar sem ter nenhuma informação do usuário. Elas também podem incluir informações como ID, nome e e-mail do usuário, mas é melhor que possuam o mínimo de informações possível para evitar vazamento destes dados.
6. Você pode usar um cartão de acesso para abrir várias portas
O seu cartão vai dar acesso ao seu quarto, mas pode também dar acesso à piscina, à academia e ao bar, por exemplo. Quais portas ele libera depende do nível de acesso que você tem no hotel. Se você for um cliente Elite Platinum Master Tabajara, o cartão pode liberar o lounge executivo também.
Uma chave de acesso OAuth pode conter scopes que dão acesso à diferentes APIs e endpoints. É importante ter isso em mente ao desenvolver a aplicação e arquitetar os níveis de acesso. É recomendável que uma chave de acesso tenha o mínimo de permissões possíveis necessárias para a aplicação funcionar.
7. Um cartão de acesso expira no final da estadia
O seu cartão de acesso parará de abrir portas depois do check-out. A data e hora de expiração estão codificadas no cartão. Caso você queira estender a estadia, a recepção poderá lhe dar um novo cartão ou adiar a expiração do cartão atual.
Chaves de acesso OAuth também expiram depois de um tempo determinado pelo servidor de autorização. A aplicação deverá, então, retornar ao servidor de autorização para solicitar uma nova chave. Utilizar access tokens de curta duração e refresh tokens de longa duração é um bom balanço entre segurança e desempenho.
Gostou do conteúdo? Comente abaixo e compartilhe com quem pode gostar também! Ficou com dúvidas? Poste abaixo!
(Conteúdo adaptado deste post)