适用于旧版捆绑服务的 App Identity API

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r 包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。

详细了解区域 ID

借助 App Identity API,应用能够找到其应用 ID(也称为项目 ID)。App Engine 应用可使用该 ID 向其他 App Engine 应用、Google API 以及第三方应用和服务声明其身份。应用 ID 也可用于生成网址或电子邮件地址,或者用于在运行时做出决策。

获取项目 ID

您可以使用 appengine.AppID 函数查找项目 ID。

获取应用主机名

默认情况下,App Engine 应用通过 https://PROJECT_ID.REGION_ID.r.appspot.com 形式的网址提供,其中项目 ID 是主机名的一部分。如果应用是通过自定义网域提供的,则可能需要检索整个主机名的组成部分。您可以使用 appengine.DefaultVersionHostname 函数完成该操作。

向其他 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 令牌,这些令牌可用于声明请求的来源是应用本身。appengine.AccessToken 函数会返回一个范围或范围列表的访问令牌。然后,可以在调用的 HTTP 标头中设置此令牌,以识别调用应用。

以下示例说明了如何使用 App Identity API 对 Google URL Shortener API 进行 REST 调用。
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
}

请注意,应用的身份由服务帐号名称表示,通常为 applicationid@appspot.gserviceaccount.com。您可以使用 appengine.ServiceAccount 函数获取确切的值。对于提供 ACL 的服务,您可以通过向此帐号授予访问权限来向应用授予访问权限。

向第三方服务声明身份

AccessToken 生成的令牌仅适用于 Google 服务。但是,您可以使用底层签名技术,向其他服务声明应用的身份。appengine.SignBytes 函数将使用应用特有的私钥为字节签名,并且 appengine.PublicCertificates 函数将返回可用于验证签名的证书。

获取默认的 Cloud Storage 存储分区名称

每个应用都可以有一个默认的 Cloud Storage 存储分区,其中包括 5 GB 免费存储空间和免费的 I/O 操作配额

如需获取默认存储分区的名称,请调用 DefaultBucketName 函数。