Come condividere i client OAuth

In questa pagina viene spiegato come condividere un client OAuth con un'altra app all'interno della tua organizzazione.

Panoramica

La condivisione di client OAuth tra progetti elimina la necessità di creare manualmente un nuovo client OAuth per ogni app nella tua organizzazione. Dopo aver creato manualmente un client OAuth, puoi assegnarlo in modo programmatico a più app.

La condivisione del client OAuth viene utilizzata anche per condividere un client OAuth con gli agenti che vuoi che siano in grado di abilitare Identity-Aware Proxy (IAP) ma che non hanno accesso alla pagina Credenziali.

La condivisione del client OAuth viene utilizzata anche quando l'applicazione utilizza un client OAuth gestito da Google per il flusso del browser e vuoi abilitare l'accesso programmatico all'applicazione.

Prima di iniziare

Crea un nuovo client OAuth completando i passaggi descritti in Creazione di client OAuth. In alternativa, puoi utilizzare un client OAuth esistente.

Accesso programmatico

Questa sezione descrive i passaggi per attivare un client OAuth per l'accesso programmatico alla tua applicazione.

  1. Inserisci i client OAuth nella lista consentita per l'accesso programmatico.

    Puoi inserire nella lista consentita un elenco di ID client OAuth di proprietà della tua organizzazione e che vuoi concedere all'applicazione l'accesso programmatico.

    Puoi inserire i client OAuth nella lista consentita per risorse e servizi a livello di organizzazione, progetto e cartella.

    gcloud

    1. Esegui questo comando per preparare un file SETTING_FILE. Aggiorna i valori in base alle esigenze.

        cat << EOF > SETTING_FILE
          access_settings:
            oauth_settings:
              programmatic_clients: ["clientId1", "clientId2", ..]
        EOF
      
    2. Utilizza il comando gcloud iap settings set per inserire i client OAuth nella lista consentita del livello che preferisci.

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

      Comandi di esempio:

      Per inserire gli ID client OAuth nella lista consentita delle risorse all'interno di un'organizzazione, esegui questo comando.

        gcloud iap settings set SETTING_FILE --organization=ORGANIZATION
        

      Per inserire gli ID client OAuth nella lista consentita delle risorse all'interno di una cartella, esegui questo comando.

        gcloud iap settings set SETTING_FILE --folder=FOLDER
        

      Per inserire gli ID client OAuth nella lista consentita di tutte le risorse di tipo web all'interno di un progetto, esegui questo comando.

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

      Per inserire gli ID client OAuth nella lista consentita di un servizio App Engine all'interno di un progetto, esegui questo comando.

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

      Sostituisci quanto segue:

      • FOLDER: l'ID cartella.
      • ORGANIZATION: l'ID organizzazione.
      • PROJECT: l'ID progetto.
      • RESOURCE_TYPE: il tipo di risorsa IAP. Deve essere app-engine, iap_web, compute, organization o folder.
      • SERVICE: nome del servizio. Questa azione è facoltativa quando resource-type è compute o app-engine.
      • VERSION: il nome della versione. Non è applicabile per compute ed è facoltativa quando resource-type è app-engine.

    API

    1. Esegui questo comando per preparare un file iap_settings.json. Aggiorna i valori in base alle esigenze.

      cat << EOF > iap_settings.json
      {
        "access_settings": {
            "oauth_settings": {
                programmatic_clients: ["clientId1", "clientId2", ..]
              }
          }
      }
      EOF
      
    2. Ottieni il nome della risorsa eseguendo il comando gcloud iap settings get. Copia il campo del nome dall'output.
      Ti servirà nel passaggio successivo.

      gcloud iap settings get [--organization=ORGANIZATION --folder=FOLDER --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION]
      
    3. Sostituisci RESOURCE_NAME nel comando seguente con il nome del passaggio precedente. Il campo IapSettings verrà aggiornato.

      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. Accedi all'applicazione utilizzando uno qualsiasi degli ID client OAuth inclusi nella lista consentita. Vedi Autenticazione programmatica.

Accesso browser

Per abilitare IAP all'utilizzo del tuo ID client e del tuo secret mediante la console Google Cloud, segui le istruzioni riportate di seguito.

Rischi

Anche se la condivisione di un client tra le tue app è comoda, ci sono dei rischi. Questa sezione illustra i potenziali rischi legati alla condivisione dei clienti e spiega come mitigarli.

Single point of failure

L'utilizzo di un solo client OAuth per molte app crea un single point of failure. Se un client viene eliminato o modificato in modo errato, questa operazione influisce su tutte le app che lo utilizzano.

Per mitigare questo problema, condividi i client solo quando soddisfi un caso d'uso importante per client condivisi.

Fughe di client secret

Per condividere un client, è necessario condividere il client secret con persone e script. Ciò aumenta il rischio di fuga del client secret. IAP non è in grado di distinguere tra i token creati dalla tua app e quelli creati da un client secret divulgato.

L'accesso alle risorse IAP può essere monitorato con Cloud Audit Logging. Se ritieni che sia possibile che il tuo client secret sia stato divulgato, reimpostalo dalla pagina Credenziali.

Per ridurre questo rischio, proteggi i client secret come una password. Limita la loro condivisione e non archiviarli mai come testo non crittografato.

Furto d'identità di utenti autorizzati

Se il tuo client secret viene divulgato, un'app dannosa può impostare il cookie del browser per l'autenticazione IAP nel suo dominio per assumere l'identità di un utente autorizzato. Con questo cookie, IAP autentica l'utente impersonato per tutte le app che condividono il client secret divulgato.

Per ridurre questo rischio, evita di condividere i client tra risorse che condividono anche utenti autorizzati. Imposta le autorizzazioni per risorsa per garantire che IAP non autorizzi l'accesso anche se un utente impersonato viene autenticato.

Raccolta identità utente

Se il tuo client secret viene divulgato, un'app dannosa può utilizzare il tuo ID client per raccogliere le identità degli utenti della tua app. Viene attivato quando gli utenti visitano l'app dannosa.

Quando un utente accede per la prima volta a un'app protetta da IAP, gli viene chiesto di condividere la sua identità con l'app. In questo modo, gli utenti hanno il controllo sulle loro informazioni personali. Quando un utente acconsente a condividere la propria identità, il sistema di accesso di Google registra tale consenso. IAP non chiederà nuovamente all'utente di ricevere richieste successive da qualsiasi ID client nello stesso progetto.

L'identità di tutti gli utenti che hanno acconsentito a condividere la propria identità con la tua app e che visitano l'app dannosa vedranno subito la propria identità condivisa senza il suo consenso.