API App Identity per servizi in bundle legacy

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base alla regione selezionata al momento della creazione dell'app. Non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono apparire simili ai codici di paese e provincia 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 rilevare il proprio ID applicazione (chiamato anche ID progetto). Utilizzando l'ID, un'applicazione App Engine può rivendicare la propria identità ad altre app App Engine, API di Google e applicazioni e servizi di terze parti. L'ID applicazione può essere utilizzato anche per generare un URL o un indirizzo email oppure per prendere una decisione in fase di runtime.

Recupero dell'ID progetto

L'ID progetto è disponibile utilizzando la funzione appengine.AppID.

Recupero del nome host dell'applicazione

Per impostazione predefinita, le app di App Engine vengono gestite dagli 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 la funzione appengine.DefaultVersionHostname.

Rivendicazione dell'identità ad altre applicazioni App Engine

Se vuoi determinare l'identità dell'app App Engine che sta effettuando 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 può essere modificata 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 confrontandolo con un elenco di ID autorizzati a effettuare richieste.

Rivendicazione dell'identità alle API di Google

Le API di Google utilizzano il protocollo OAuth 2.0 per autenticazione e autorizzazione. L'API App Identity è in grado di creare token OAuth utilizzabili per dichiarare che l'origine di una richiesta è l'applicazione stessa. La funzione appengine.AccessToken restituisce un token di accesso per un ambito o un elenco di ambiti. Questo token può quindi 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 URLabbreviationer.
import (
	"context"
	"net/http"

	"google.golang.org/appengine/urlfetch"

	"golang.org/x/oauth2"
	"golang.org/x/oauth2/google"
	urlshortener "google.golang.org/api/urlshortener/v1"
)

// shortenURL returns a short URL which redirects to the provided url,
// using Google's urlshortener API.
func shortenURL(ctx context.Context, url string) (string, error) {
	transport := &oauth2.Transport{
		Source: google.AppEngineTokenSource(ctx, urlshortener.UrlshortenerScope),
		Base:   &urlfetch.Transport{Context: ctx},
	}
	client := &http.Client{Transport: transport}

	svc, err := urlshortener.New(client)
	if err != nil {
		return "", err
	}

	resp, err := svc.Url.Insert(&urlshortener.Url{LongUrl: url}).Do()
	if err != nil {
		return "", err
	}
	return resp.Id, nil
}

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 la funzione appengine.ServiceAccount. Per i servizi che offrono ACL, puoi concedere l'accesso all'applicazione concedendo l'accesso a questo account.

Rivendicazione dell'identità a servizi di terze parti

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

Recupero del nome predefinito del bucket Cloud Storage

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

Per ottenere il nome del bucket predefinito, chiama DefaultBucketName.