舊版套裝組合服務的 App Identity API

區域 ID

REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的簡寫代碼。雖然某些區域 ID 可能看起來與常用的國家/地區代碼相似,但此代碼並非對應國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是在此日期之前建立的現有應用程式,網址中則可選擇加入地區 ID。

進一步瞭解區域 ID

App Identity API 可讓應用程式找到自己的應用程式 ID (也稱為專案 ID)。使用這個 ID,App Engine 應用程式就可以向其他 App Engine 應用程式、Google API 及第三方應用程式與服務宣告自己的身分。此應用程式 ID 也可用來產生網址或電子郵件地址,或是建立執行階段決策。

取得專案 ID

您可以使用 AppIdentityService::getApplicationId() 方法找出專案 ID。

取得應用程式主機名稱

根據預設,App Engine 應用程式是由 https://PROJECT_ID.REGION_ID.r.appspot.com 格式的網址提供服務,其中專案 ID 是主機名稱的一部分。如果應用程式是由自訂網域提供服務,則可能需要擷取完整的主機名稱元件。您可以使用 AppIdentityService::getDefaultVersionHostname() 方法執行這項操作。

向其他 App Engine 應用程式宣告身分

針對向您的 App Engine 應用程式發出要求的 App Engine 應用程式,您可以使用要求標頭 X-Appengine-Inbound-Appid 來辨識其身分。這個標頭是由 URLFetch 服務加入要求,使用者無法修改,因此發出要求的應用程式 ID 如果存在,便能確切指出。

必要條件:

  • 只有向您應用程式 appspot.com 網域發出的呼叫會含有 X-Appengine-Inbound-Appid 標頭。對自訂網域的呼叫不含標頭。
  • 必須將要求設定為不追蹤重新導向。

在應用程式處理常式中,您可以讀取 X-Appengine-Inbound-Appid 標頭並比對允許發出要求的 ID 清單,藉此檢查傳入的 ID。

向 Google API 宣告身分

Google API 使用 OAuth 2.0 通訊協定進行驗證及授權。App Identity API 可建立 OAuth 憑證,用來宣告要求來源是應用程式本身。getAccessToken() 方法會傳回單一範圍或列有多範圍清單的存取憑證。接著可在呼叫的 HTTP 標頭中設定這個憑證,以識別呼叫應用程式。

以下範例示範如何透過 App Identity API 來擷取使用 OAuth 的 Google 日曆聯絡人。
// 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));
}

請注意,應用程式身分是以服務帳戶名稱表示,通常是「applicationid@」appspot.gserviceaccount.com您可以使用 getServiceAccountName() 方法取得確切的值。對於提供 ACL 的服務,您可以透過授予這個帳戶存取權的方式來授予應用程式存取權。

向第三方服務宣告身分

getAccessToken() 產生的憑證只適用於 Google 服務。但您可以使用基本的簽署技術,向其他服務宣告應用程式的身分。signForApp() 方法會利用應用程式專用的私密金鑰簽署位元組,而 getPublicCertificates() 方法會傳回可用來驗證簽名的憑證。

取得預設的 Cloud Storage 值區名稱

每個應用程式都有一個預設的 Cloud Storage 值區,其中包含 5 GB 的免費儲存空間及免費的 I/O 作業配額

如要取得預設值區的名稱,請呼叫 CloudStorageTools::getDefaultGoogleStorageBucketName。您也可以選擇使用 #default# 值做為值區名稱,其中的 #default# 會在執行階段自動替換成應用程式的預設值區名稱。