Como compartilhar clientes OAuth

Nesta página, explicamos como compartilhar um cliente OAuth com outro app na sua organização.

Visão geral

O compartilhamento de clientes OAuth entre projetos elimina a necessidade de criar manualmente um novo cliente OAuth para cada app na sua organização. Assim, é possível atribuir o cliente a vários apps de forma programática.

O compartilhamento de cliente OAuth também é usado para compartilhar um cliente OAuth padrão com agentes para quem você quer habilitar o Identity-Aware Proxy (IAP), mas que não têm acesso à página "Credenciais".

Lembre-se de que os apps para dispositivos móveis não conseguem autenticar com clientes OAuth de um projeto diferente.

Antes de começar

Consulte um dos guias abaixo para saber como ativar o IAP para um app e criar um cliente OAuth.

No momento, o compartilhamento de clientes com o App Engine não é compatível.

Como atribuir um cliente compartilhado aos apps do Compute Engine

  1. Acesse a página Grupos de instâncias para verificar se as instâncias estão em um grupo.
  2. Defina os serviços de back-end.
  3. Configure o balanceamento de carga.
  4. Usando a ferramenta de linha de comando gcloud, execute gcloud auth login.
  5. Siga o URL que aparece para fazer login.
  6. Depois de fazer login, copie o código de verificação que aparece e cole-o na linha de comando.
  7. Execute gcloud config set project PROJECT_ID no projeto em que você quer ativar o IAP.
  8. Para ativar o IAP, use o ID e a chave secreta do cliente inclusos na página "Credenciais" e execute o seguinte comando:

    gcloud compute backend-services update BACKEND_SERVICE_NAME  \
       --global --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
    

Como atribuir um cliente compartilhado aos apps do GKE

Siga as etapas para configurar o arquivo BackendConfig do seu app, em vez de usar o ID e a chave secreta do cliente compartilhados ao executar o seguinte comando:

kubectl create secret generic my-secret --from-literal=client_id=CLIENT_ID \
    --from-literal=client_secret=CLIENT_SECRET

Riscos

Compartilhar um cliente entre seus aplicativos é conveniente, mas há riscos. Nesta seção, descrevemos os riscos potenciais ao compartilhar clientes e como minimizá-los.

Ponto único de falha

Usar um cliente OAuth para muitos apps cria um ponto único de falha. Se um cliente for excluído ou modificado incorretamente, todos os aplicativos que usam esse cliente serão afetados.

Para minimizar esse problema, somente compartilhe clientes se for realmente necessário usar clientes compartilhados no caso de uso.

Vazamentos de chaves secretas do cliente

Compartilhar um cliente requer o compartilhamento da chave secreta dele com pessoas e scripts, o que aumenta o risco de vazamento. O IAP não consegue diferenciar entre os tokens criados a partir do seu app ou de uma chave secreta que vazou.

O acesso aos recursos do IAP pode ser monitorado com o Cloud Audit Logging. Se você acredita que a chave secreta do cliente possa ter vazado, redefina-a na página "Credenciais".

Para mitigar esse risco, proteja as chaves secretas do cliente como uma senha. Evite compartilhá-las e nunca as armazene como texto simples.

Falsificação de identidade de usuários autorizados

Se a chave secreta do cliente vazar, um app mal-intencionado poderá definir o cookie do navegador de autenticação do IAP no seu domínio para se passar por um usuário autorizado. Com esse cookie, o IAP autentica o usuário falsificado em todos os apps que compartilham a chave que vazou.

Para reduzir esse risco, evite compartilhar clientes entre recursos que também compartilham usuários autorizados. Defina permissões por recurso para garantir que o IAP não autorize o acesso, mesmo que um usuário falsificado seja autenticado.

Coleta de identidade do usuário

Se a chave secreta do cliente vazar, um app mal-intencionado poderá usar o ID do cliente para coletar as identidades dos usuários do seu aplicativo. Esse comportamento é acionado quando seus usuários visitam o app malicioso.

Quando um usuário acessa um app protegido pelo IAP pela primeira vez, ele é solicitado a compartilhar a identidade com o aplicativo. Isso proporciona controle aos usuários sobre as informações pessoais deles. Quando um usuário autoriza o compartilhamento da identidade, o sistema de login do Google registra esse consentimento. O IAP não pedirá a autorização do usuário novamente em solicitações posteriores de nenhum ID do cliente no mesmo projeto.

Assim, se um usuário tiver autorizado o compartilhamento da identidade no seu app e visitar o app mal-intencionado, sua identidade será imediatamente compartilhada sem o consentimento dele.