API App Identity per servizi in bundle legacy

ID regione

L'elemento REGION_ID è un codice abbreviato che Google assegna in base alla regione selezionata quando crei l'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare simili ai codici di paesi e province di uso comune. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL di App Engine. Per le app esistenti create prima di questa data, l' ID regione è facoltativo nell'URL.

Scopri di più sugli ID regione.

L'API App Identity consente a un'applicazione di scoprire il proprio ID applicazione (chiamato anche ID progetto). Utilizzando l'ID, un'applicazione App Engine può affermare la propria identità ad altre app App Engine, alle API di Google e ad applicazioni e servizi di terze parti. L'ID applicazione può essere utilizzato anche per generare un URL o un indirizzo email o per prendere una decisione in fase di runtime.

Recuperare l'ID progetto

L'ID progetto può essere trovato utilizzando il appengine.AppID.

Recuperare il nome host dell'applicazione

Per impostazione predefinita, le app App Engine vengono pubblicate da URL nel formato https://PROJECT_ID.REGION_ID.r.appspot.com, dove l'ID progetto fa parte del nome host. Se un'app viene pubblicata da un dominio personalizzato, potrebbe essere necessario recuperare l'intero componente del nome host. Puoi farlo utilizzando l' appengine.DefaultVersionHostname.

Affermare l'identità ad altre app App Engine

Se vuoi determinare l'identità dell'app App Engine che effettua una richiesta alla tua app App Engine, puoi utilizzare l'intestazione della richiesta X-Appengine-Inbound-Appid. Questa intestazione viene aggiunta alla richiesta dal servizio URLFetch e non è modificabile dall'utente, quindi indica in modo sicuro l'ID progetto dell'applicazione richiedente, se presente.

Requisiti:

  • Solo le chiamate effettuate al dominio appspot.com della tua app conterranno l'intestazione X-Appengine-Inbound-Appid. Le chiamate ai domini personalizzati non contengono l'intestazione.

Nel gestore dell'applicazione, puoi controllare l'ID in entrata leggendo l'intestazione X-Appengine-Inbound-Appid e confrontandola con un elenco di ID autorizzati a effettuare richieste.

Affermare l'identità alle API di Google

Le API di Google utilizzano il protocollo OAuth 2.0 per l'autenticazione e l'autorizzazione. L'API App Identity può creare token OAuth che possono essere utilizzati per affermare che l'origine di una richiesta è l'applicazione stessa. Il appengine.AccessToken funzione restituisce un token di accesso per un ambito o un elenco di ambiti. Questo token può essere impostato nelle intestazioni HTTP di una chiamata per identificare l'applicazione chiamante.

L'esempio seguente mostra come utilizzare l'API App Identity per effettuare una chiamata REST all'API Google URL Shortener.

import (
    "context"
    "fmt"
    "net/http"

  "google.golang.org/appengine/v2"
    "golang.org/x/oauth2"
    "golang.org/x/oauth2/google"
    "google.golang.org/appengine/v2/urlfetch"
)

func handler(w http.ResponseWriter, r *http.Request) {
    ctx := appengine.NewContext(r)
    client := &http.Client{
        Transport: &oauth2.Transport{
            Source: google.AppEngineTokenSource(ctx, "https://www.googleapis.com/auth/urlshortener"),
            Base:   &urlfetch.Transport{Context: ctx},
        },
    }
    // ... use client to make requests
    _ = client
    fmt.Fprintln(w, "Client created")
}

Tieni presente che l'identità dell'applicazione è rappresentata dal nome dell'account di servizio, che in genere è applicationid@appspot.gserviceaccount.com. Puoi ottenere il valore esatto utilizzando il appengine.ServiceAccount funzione . Per i servizi che offrono ACL, puoi concedere l'accesso all'applicazione concedendo l'accesso a questo account.

Affermare l'identità ai servizi di terze parti

Il token generato dal appengine.AccessToken funzione funziona solo con i servizi Google. Tuttavia, puoi utilizzare la tecnologia di firma sottostante per affermare l'identità della tua applicazione ad altri servizi. Il metodo appengine.SignBytes firmerà i byte utilizzando una chiave privata univoca per la tua applicazione, mentre il metodo appengine.PublicCertificates restituirà i certificati che possono essere utilizzati per convalidare la firma.

Recuperare il nome del bucket Cloud Storage predefinito

Ogni applicazione può avere un bucket Cloud Storage predefinito, che include 5 GB di spazio di archiviazione senza costi e una quota senza costi per le operazioni di I/O.