API App Identity para serviços agrupados antigos

ID da região

O REGION_ID é um código abreviado que a Google atribui com base na região que seleciona quando cria a sua app. O código não corresponde a um país ou uma província, embora alguns IDs de regiões possam parecer semelhantes aos códigos de países e províncias usados frequentemente. Para apps criadas após fevereiro de 2020, REGION_ID.r está incluído nos URLs do App Engine. Para apps existentes criadas antes desta data, o ID da região é opcional no URL.

Saiba mais acerca dos IDs de regiões.

A API App Identity permite que uma aplicação descubra o respetivo ID da aplicação (também denominado ID do projeto). Usando o ID, uma aplicação do App Engine pode afirmar a sua identidade a outras apps do App Engine, APIs Google e aplicações e serviços de terceiros. O ID da aplicação também pode ser usado para gerar um URL ou um endereço de email, ou para tomar uma decisão em tempo de execução.

Obter o ID do projeto

Pode encontrar o ID do projeto através da função appengine.AppID.

Obter o nome do anfitrião da aplicação

Por predefinição, as apps do App Engine são publicadas a partir de URLs no formato https://PROJECT_ID.REGION_ID.r.appspot.com, em que o ID do projeto faz parte do nome de anfitrião. Se uma app for publicada a partir de um domínio personalizado, pode ser necessário obter o componente de nome de anfitrião completo. Pode fazê-lo através da função appengine.DefaultVersionHostname.

Afirmar a identidade a outras apps do App Engine

Se quiser determinar a identidade da app do App Engine que está a fazer um pedido à sua app do App Engine, pode usar o cabeçalho do pedido X-Appengine-Inbound-Appid. Este cabeçalho é adicionado ao pedido pelo serviço URLFetch e não é modificável pelo utilizador, pelo que indica com segurança o ID do projeto da aplicação que está a fazer o pedido, se estiver presente.

Requisitos:

  • Apenas as chamadas feitas para o domínio appspot.com da sua app vão conter o cabeçalho X-Appengine-Inbound-Appid. As chamadas para domínios personalizados não contêm o cabeçalho.

No controlador da aplicação, pode verificar o ID recebido lendo o cabeçalho X-Appengine-Inbound-Appid e comparando-o com uma lista de IDs autorizados a fazer pedidos.

Afirmar a identidade às APIs Google

As APIs Google usam o protocolo OAuth 2.0 para autenticação e autorização. A API App Identity pode criar tokens OAuth que podem ser usados para afirmar que a origem de um pedido é a própria aplicação. A função appengine.AccessToken devolve um token de acesso para um âmbito ou uma lista de âmbitos. Este token pode ser definido nos cabeçalhos HTTP de uma chamada para identificar a aplicação de chamada.

O exemplo seguinte mostra como usar a API App Identity para fazer uma chamada REST para a API Google URL Shortener.
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
}

Tenha em atenção que a identidade da aplicação é representada pelo nome da conta de serviço, que é normalmente applicationid@appspot.gserviceaccount.com. Pode obter o valor exato através da função appengine.ServiceAccount. Para serviços que oferecem ACLs, pode conceder acesso à aplicação concedendo acesso a esta conta.

Afirmar a identidade a serviços de terceiros

O token gerado por AccessToken só funciona com os serviços Google. No entanto, pode usar a tecnologia de assinatura subjacente para afirmar a identidade da sua aplicação a outros serviços. A função appengine.SignBytes assina bytes através de uma chave privada exclusiva da sua aplicação, e a função appengine.PublicCertificates devolve certificados que podem ser usados para validar a assinatura.

Obter o nome do contentor do Cloud Storage predefinido

Cada aplicação pode ter um contentor do Cloud Storage predefinido, que inclui 5 GB de armazenamento gratuito e uma quota gratuita para operações de I/O.

Para obter o nome do contentor predefinido, chame DefaultBucketName.