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 dei client OAuth tra progetti elimina la necessità di creare manualmente un nuovo client OAuth per ogni app della tua organizzazione. Dopo aver creato manualmente un client OAuth, puoi assegnarlo programmaticamente a più app.

La condivisione dei client OAuth viene utilizzata anche per condividere un client OAuth con gli agenti che devono poter attivare Identity-Aware Proxy (IAP), ma non devono avere 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 attivare l'accesso programmatico all'applicazione.

Prima di iniziare

Crea un nuovo client OAuth completando i passaggi descritti in Creazione del client OAuth oppure utilizza un client OAuth esistente.

Accesso programmatico

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

  1. Aggiungi alla lista consentita i client OAuth per l'accesso programmatico.

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

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

    gcloud

    1. Esegui il comando seguente 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 nella lista consentita i client OAuth a un livello desiderato.

      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 nella lista consentita gli ID client OAuth nelle risorse di un'organizzazione, esegui il seguente comando.

        gcloud iap settings set SETTING_FILE --organization=ORGANIZATION
        

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

        gcloud iap settings set SETTING_FILE --folder=FOLDER
        

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

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

      Per inserire nella lista consentita gli ID client OAuth in un servizio App Engine all'interno di un progetto, esegui il seguente 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: il nome del servizio. Questa opzione è facoltativa quando resource-type è compute o app-engine.
      • VERSION: il nome della versione. Questo valore non è applicabile per compute ed è facoltativo quando resource-type è app-engine.

    API

    1. Esegui il comando seguente 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à il nome 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 seguente comando con il nome del passaggio precedente. 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 degli ID client OAuth inclusi nella lista consentita. Consulta la sezione Autenticazione programmatica.

Accesso da browser

Per consentire a IAP di utilizzare il tuo ID client e il tuo secret utilizzando la console Google Cloud, segui le istruzioni riportate di seguito.

Rischi

Sebbene la condivisione di un client tra le app sia comoda, presenta dei rischi. Questa sezione illustra i potenziali rischi della condivisione dei clienti e come ridurli.

Single point of failure

L'utilizzo di un client OAuth per molte app crea un singolo punto di errore. Se un client viene eliminato o modificato in modo errato, tutte le app che lo utilizzano sono interessate.

Per ridurre il problema, condividi i clienti solo quando è necessario soddisfare un caso d'uso importante per i clienti condivisi.

Fughe di client secret

La condivisione di un client richiede la condivisione del client secret con persone e script. Ciò aumenta il rischio di fuga del client secret. IAP non è in grado di distinguere i token creati dalla tua app da quelli creati da un client secret compromesso.

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

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

Utilizzo dell'identità di utenti autorizzati

Se il tuo client secret viene divulgato, un'app dannosa può impostare il cookie del browser di autenticazione IAP sul proprio dominio per impersonare un utente autorizzato. Con questo cookie, IAP autentica l'utente sostituito per tutte le app che condividono il segreto client compromesso.

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

Raccolta delle identità utente

Se il client secret viene compromesso, un'app dannosa può utilizzare il tuo ID client per raccogliere le identità degli utenti della tua app. Si attiva quando i tuoi 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 propria identità con l'app. In questo modo, gli utenti hanno il controllo sulle proprie informazioni personali. Quando un utente acconsente a condividere la sua identità, il sistema di accesso di Google registra questo consenso. IAP non chiederà di nuovo all'utente di confermare le richieste successive da qualsiasi ID client nello stesso progetto.

L'identità di qualsiasi utente che ha dato il consenso a condividerla con la tua app e che visita l'app dannosa verrà condivisa immediatamente senza il suo consenso.