リージョン ID
REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r は App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。
詳しくは、リージョン ID をご覧ください。
App Identity API は、アプリケーションがアプリケーション ID(「プロジェクト ID」)を見つけられるようにします。App Engine アプリケーションは ID を使用して、そのアプリケーションの識別情報を他の App Engine アプリ、Google API、サードパーティ製アプリケーションおよびサービスに表明します。アプリケーション ID は URL やメールアドレスの生成、ランタイムでの決定にも使用できます。
プロジェクト ID を取得する
プロジェクト ID は
AppIdentityService::getApplicationId() メソッドで確認できます。
アプリケーションのホスト名を取得する
デフォルトでは、App Engine アプリは https://PROJECT_ID.REGION_ID.r.appspot.com という形式の URL から提供され、プロジェクト ID はホスト名の一部になります。アプリがカスタム ドメインから提供される場合、ホスト名のコンポーネント全体の取得が必要となることがあります。これを行うには、
AppIdentityService::getDefaultVersionHostname() メソッド。
他の App Engine アプリに ID を表明する
App Engine アプリにリクエストを行っている App Engine アプリの ID を特定するには、リクエスト ヘッダー X-Appengine-Inbound-Appid を使用します。このヘッダーは URLFetch サービスによりリクエストに追加され、ユーザーによる変更はできないため、リクエスト元のアプリケーションのプロジェクト ID を設定すると、その ID を安全に示すことができます。
要件:
アプリの
appspot.comドメインへの呼び出しのみにX-Appengine-Inbound-Appidヘッダーが含まれます。カスタム ドメインへの呼び出しにはヘッダーが含まれません。リダイレクトに従わないようにリクエストを設定する必要があります。
アプリケーション ハンドラでは、X-Appengine-Inbound-Appid ヘッダーを読み取り、リクエストを行うことを許可された ID のリストと比較することで受信 ID を確認できます。
Google API に ID を表明する
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\AppIdentity\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)); }
アプリケーションの ID はサービス アカウント名で表されます。通常は applicationid@appspot.gserviceaccount.com となります。正確な値を取得するには、
getServiceAccountName() メソッド
を使用します。ACL を提供するサービスでは、このアカウントのアクセスを許可することでアプリケーションにアクセスを許可します。
サードパーティのサービスに ID を表明する
getAccessToken() メソッド
により生成されるトークンは、Google サービスに対してのみ機能します。ただし、基盤となる署名テクノロジーを使用してアプリケーションの ID をその他のサービスに表明できます。
signForApp() メソッド
がアプリケーション固有の秘密鍵を使用してバイトに署名し、
getPublicCertificates() メソッド
が署名の検証に使用できる証明書を返します。
デフォルトの Cloud Storage バケット名を取得する
各アプリケーションには 1 つのデフォルトの Cloud Storage バケットがあります。このバケットには無料のストレージ容量 5 GB と I/O オペレーションの無料の割り当てが含まれます。
デフォルトのバケットの名前を取得するには、App Identity API を使用します。CloudStorageTools::getDefaultGoogleStorageBucketName を呼び出します。また、必要に応じてバケット名として #default# の値を使用します。#default# はランタイムに、アプリケーションのデフォルトのバケット名に自動的に置換されます。