Nesta página, apresentamos informações básicas sobre autenticação e chaves de API: a maneira como cada uma delas é usada, as diferenças entre elas e os cenários em que o uso de chaves de API deve ser considerado.
Chaves de API são para projetos, autenticação é para usuários
O Cloud Endpoints processa chaves de API e esquemas de autenticação, como Firebase ou Auth0. Confira abaixo a principal diferença entre eles:
As chaves de API identificam o projeto (aplicativo ou site) que faz a chamada a uma API.
Os tokens de autenticação identificam um usuário (a pessoa) que está usando o aplicativo ou site.
Chaves de API fornecem autorização de projeto
Para decidir qual esquema é mais apropriado, é importante entender o que as chaves de API e a autenticação podem fornecer.
Chaves de API fornecem:
identificação do projeto: identifica o aplicativo ou o projeto que está fazendo uma chamada para essa API;
autorização do projeto: verifica se o aplicativo de chamada recebeu acesso para chamar a API e a ativou no projeto dele.
As chaves de API não são tão seguras quanto os tokens de autenticação (consulte Segurança das chaves de API), mas identificam o aplicativo ou projeto que está chamando uma API. Eles são gerados no projeto que está fazendo a chamada e é possível restringir o uso a um ambiente, como um intervalo de endereços IP ou um app Android ou iOS.
Ao identificar o projeto da chamada, é possível usar chaves de API para associar informações de uso a esse projeto. As chaves de API permitem que o Extensible Service Proxy (ESP) rejeite chamadas de projetos que não receberam acesso ou estão ativados na API.Autenticação de usuários
Por outro lado, os esquemas de autenticação normalmente servem a dois propósitos:
Autenticação de usuários: verifica de forma segura se o usuário que faz a chamada é quem afirma ser.
Autorização de usuários: verifica se o usuário deve ter acesso para fazer a solicitação.
Os esquemas de autenticação fornecem uma maneira segura de identificar o usuário que faz a chamada. O Endpoints também verifica o token de autenticação para verificar se tem permissão para chamar uma API. Com base nessa autenticação, o servidor da API decide a autorização de solicitações.
Se você precisa identificar o usuário que está fazendo a chamada, consulte Como autenticar usuários.
Embora as chaves de API identifiquem o projeto que faz a chamada, elas não identificam o usuário. Por exemplo, se você criou um aplicativo que está chamando uma API, uma chave de API pode identificar o aplicativo que está fazendo a chamada, mas não a pessoa que está usando o aplicativo.
Se você precisa de uma maneira mais segura de limitar quais projetos ou serviços podem chamar sua API, consulte Como autenticar com uma conta de serviço.
Segurança de chaves de API
As chaves API geralmente não são consideradas seguras. Normalmente, elas são acessíveis aos clientes, facilitando o roubo de uma delas. Se a chave for roubada, ela não tem expiração, assim pode ser usada indefinidamente, a menos que o dono do projeto a revogue ou gere a chave novamente. Ainda que as restrições que você pode definir em uma chave de API atenuem isso, há abordagens melhores para a autorização.
Veja exemplos em Como autenticar usuários.
Quando usar chaves de API
Uma API pode restringir alguns ou todos métodos dela para exigir chaves de API. Isso faz sentido se:
Você quer bloquear o tráfego anônimo. As chaves de API identificam o tráfego de um aplicativo para o produtor da API, assim o desenvolvedor do aplicativo pode trabalhar com o produtor da API para depurar um problema ou mostrar a utilização do aplicativo.
Você quer controlar o número de chamadas feitas para sua API.
Você quer identificar os padrões de utilização no tráfego da API. É possível ver o uso de aplicativos em APIs e serviços.
Você quer filtrar registros por chave de API.
As chaves de API não podem ser usadas para:
identificação de usuários individuais: chaves de API não identificam os usuários, elas identificam projetos;
autorização segura;
identificação dos criadores de um projeto;
O Service Infrastructure não fornece um método para pesquisar diretamente projetos a partir das chaves de API.