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 do método AppIdentityService::getApplicationId()
.
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 do método AppIdentityService::getDefaultVersionHostname()
.
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çalhoX-Appengine-Inbound-Appid
. As chamadas para domínios personalizados não contêm o cabeçalho. - Os seus pedidos têm de estar definidos para não seguirem redirecionamentos.
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. O método getAccessToken()
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.
// Retrieves Google Calendar contacts using OAuth
use google\appengine\api\app_identity\AppIdentityService;
function setAuthHeader() {
$access_token = AppIdentityService::getAccessToken('https://www.google.com/m8/feeds');
return [sprintf('Authorization: OAuth %s', $access_token['access_token'])];
}
$get_contacts_url = 'https://www.google.com/m8/feeds/contacts/default/full';
$headers = setAuthHeader();
$opts = [
'http' => [
'header' => implode("\r\n", $headers),
],
];
$context = stream_context_create($opts);
$response = file_get_contents($get_contacts_url, false, $context);
$xml = simplexml_load_string($response);
$email = $xml->author->email;
$service_account = AppIdentityService::getServiceAccountName();
if (strcmp($email, $service_account) != 0) {
die(sprintf('%s does not match the service account name %s.',
$email,
$service_account));
}
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 do método getServiceAccountName()
.
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 getAccessToken()
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. O método signForApp()
assina bytes através de uma chave privada exclusiva da sua aplicação, e o método getPublicCertificates()
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 CloudStorageTools::getDefaultGoogleStorageBucketName.
Em alternativa, pode usar o valor #default#
como o nome do contentor, em que #default#
é substituído automaticamente no momento da execução pelo nome do contentor predefinido da aplicação.