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 com agentes para quem você quer habilitar o Identity-Aware Proxy (IAP), mas que não têm acesso à página "Credenciais".

O compartilhamento de cliente OAuth também é usado quando o aplicativo usa um cliente OAuth gerenciado pelo Google para o fluxo do navegador e você quer ativar o acesso programático ao aplicativo.

Antes de começar

Crie um novo cliente OAuth seguindo as etapas em Criação de um cliente OAuth ou use um cliente OAuth já existente.

Acesso programático

Esta seção descreve as etapas para ativar um cliente OAuth para acesso programático ao seu aplicativo.

  1. Adicionar clientes OAuth à lista de permissões para acesso programático.

    É possível incluir em uma lista de permissões uma lista de IDs de cliente OAuth que pertencem à sua organização e para os quais você quer fornecer acesso programático ao aplicativo.

    É possível adicionar os clientes OAuth à lista de permissões em recursos e serviços no nível da organização, do projeto e da pasta.

    gcloud

    1. Execute o comando a seguir para preparar um arquivo SETTING_FILE. Atualize os valores conforme necessário.

        cat << EOF > SETTING_FILE
          access_settings:
            oauth_settings:
              programmatic_clients: ["clientId1", "clientId2", ..]
        EOF
      
    2. Use o comando gcloud iap settings set para adicionar clientes OAuth à lista de permissões no nível desejado.

      gcloud iap settings set SETTING_FILE [--organization=ORGANIZATION --folder=FOLDER --project=/PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION
      

      Exemplos de comandos:

      Para permitir IDs de cliente OAuth na lista de permissões dos recursos de uma organização, execute o seguinte comando.

        gcloud iap settings set SETTING_FILE --organization=ORGANIZATION
        

      Para adicionar IDs de cliente OAuth à lista de permissões nos recursos de uma pasta, execute o comando a seguir.

        gcloud iap settings set SETTING_FILE --folder=FOLDER
        

      Para permitir IDs de cliente OAuth em todos os recursos do tipo Web em um projeto, execute o comando a seguir.

        gcloud iap settings set SETTING_FILE --project=PROJECT --resource-type=iap_web
        

      Para permitir IDs de cliente OAuth em um serviço do App Engine em um projeto, execute o seguinte comando.

        gcloud iap settings set SETTING_FILE --project=PROJECT --resource-type=app-engine --service=SERVICE
        

      Substitua:

      • FOLDER: o ID da pasta.
      • ORGANIZATION: o ID da organização.
      • PROJECT: o ID do projeto.
      • RESOURCE_TYPE: o tipo de recurso do IAP. Precisa ser app-engine, iap_web, compute, organization ou folder.
      • SERVICE: o nome do serviço. Isso é opcional quando resource-type é compute ou app-engine.
      • VERSION: o nome da versão. Isso não é aplicável a compute e é opcional quando resource-type é app-engine.

    API

    1. Execute o comando a seguir para preparar um arquivo iap_settings.json. Atualize os valores conforme necessário.

      cat << EOF > iap_settings.json
      {
        "access_settings": {
            "oauth_settings": {
                programmatic_clients: ["clientId1", "clientId2", ..]
              }
          }
      }
      EOF
      
    2. Para conferir o nome do recurso, execute o comando gcloud iap settings get. Copie o campo de nome da saída.
      Você vai precisar do nome na próxima etapa.

      gcloud iap settings get [--organization=ORGANIZATION --folder=FOLDER --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION]
      
    3. Substitua RESOURCE_NAME no comando a seguir pelo nome da etapa anterior. O IapSettings será atualizado.

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d @iap_settings.json \
      "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.oauthSettings.programmaticClients"
      
  2. Faça login no aplicativo usando qualquer um dos IDs de cliente OAuth da lista de permissões. Consulte Autenticação programática.

Acesso por navegador

Para permitir que o IAP use o ID e a chave secreta do cliente usando o console do Google Cloud, siga estas instruções.

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.