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. Il codice non corrispondono a un paese o a una provincia, anche se potrebbero essere visualizzati alcuni ID regione in modo simile ai codici 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 scoprire il proprio ID applicazione (chiamato anche ID progetto). Utilizzo l'ID, un'applicazione App Engine può asserire la propria identità ad altri App, 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 o per prendere una decisione di runtime.

Ottenere l'ID progetto

L'ID progetto può essere trovato utilizzando il metodo AppIdentityService::getApplicationId().

Ottenere 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 il metodo AppIdentityService::getDefaultVersionHostname().

Dichiarazione dell'identità per altre app di App Engine

Se vuoi determinare l'identità dell'app di App Engine che sta eseguendo una all'app App Engine, puoi utilizzare l'intestazione della richiesta X-Appengine-Inbound-Appid. Questa intestazione viene aggiunta alla richiesta dall'URL e non è modificabile dall'utente, perciò indica in modo sicuro dell'ID progetto dell'applicazione, 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.
  • Le richieste devono essere impostate in modo da non seguire i reindirizzamenti.

Nel gestore dell'applicazione, puoi controllare l'ID in arrivo leggendo l'intestazioneX-Appengine-Inbound-Appid e confrontandolo con un elenco di ID autorizzati a effettuare richieste.

Affermazione dell'identità alle API di Google

Le API di Google utilizzano il protocollo OAuth 2.0 per l'autenticazione e autorizzazione. L'API App Identity può creare token OAuth che possono essere utilizzati per affermare che l'origine di una richiesta è l'applicazione stessa. getAccessToken() metodo 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 recuperare i contatti di Google Calendar utilizzando OAuth.
// 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));
}

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 metodo getServiceAccountName(). Per i servizi che offrono ACL, puoi concedere l'accesso all'applicazione concedendo l'accesso a questo account.

Dichiarazione dell'identità a servizi di terze parti

Il token generato da getAccessToken() 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 signForApp() firmerà i byte utilizzando una chiave privata univoca per la tua applicazione, mentre il metodo getPublicCertificates() restituirà i certificati che possono essere utilizzati per convalidare la firma.

Recupero del nome del bucket Cloud Storage predefinito

Ogni applicazione può avere un bucket Cloud Storage predefinito, 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, chiamate CloudStorageTools::getDefaultGoogleStorageBucketName. In alternativa, facoltativamente, utilizza il valore #default# come nome del bucket, dove #default# verrà automaticamente sostituito in fase di runtime dal nome del bucket predefinito dell'applicazione.