Como compartilhar clientes OAuth

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

Informações gerais

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 que você quer ativar 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 concluindo as etapas de criação de cliente OAuth ou use um cliente OAuth atual.

Acesso programático

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

  1. Colocar clientes OAuth na lista de permissões para acesso programático.

    É possível colocar na lista de permissões uma lista de IDs do cliente OAuth da sua organização para dar acesso programático ao aplicativo.

    Você pode autorizar os clientes OAuth em recursos e serviços nos níveis 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 autorizar os clientes OAuth em um nível específico.

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

      Exemplos de comandos:

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

        gcloud iap settings set SETTING_FILE --organization=ORGANIZATION
        

      Para adicionar IDs do 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 adicionar IDs do cliente OAuth à lista de permissões em todos os recursos de tipo da Web em um projeto, execute o comando a seguir.

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

      Para adicionar IDs do cliente OAuth à lista de permissões em um serviço do App Engine de um projeto, execute o comando a seguir.

        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 para 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. Encontre o nome do recurso executando o comando gcloud iap settings get. Copie o campo de nome da saída.
      Você 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 vai 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 app usando qualquer um dos IDs do cliente OAuth que estejam na lista de permissões. Consulte Autenticação programática.

Acesso ao navegador

Para permitir que o IAP use seu ID do cliente e sua chave secreta usando o console do Google Cloud, siga as instruções abaixo.

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.