如何从 App Engine 前端查询 Google Cloud Platform 的元数据服务器以获取计算引擎后端的身份令牌 (JWT)?
How to query Google Cloud Platform's metadata server from App Engine frontend to get an identity token (JWT) for Compute engine backend?
目前,我们项目的前端有一个 Angular 9 GCP App Engine 实例,后端有一个 Django GCP Cloud 运行 服务。我们希望 Angular 应用程序从元数据服务器向 GCP 查询 JWT 令牌,我们将在 header 中为每个对后端的请求放入该令牌。根据this page查询,我们不断收到以下“混合内容”错误。
Mixed Content: The page at {our App Engine url} was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience={audienceName}'. This request has been blocked; the content must be served over HTTPS.
我们已尝试使用上述 GCP 元数据 url 的 https 版本,它不存在。理论上,我们应该能够检索此元数据,因为 GCP 实例(GCP App Engine 应用程序)正在与 GCP Compute Engine 后端通信。有没有人有过从 UI 进行此查询以获取要在后端请求中设置的令牌的经验?
即使您 Angular9 应用托管在 App Engine 上,代码(TS 代码,翻译成 Javascript)也不会 运行 在 App Engine 上,但它运行s 在客户端浏览器上。
好的,你肯定知道这一点,但这将帮助我更简单地解释你的问题。您尝试调用内部 Google URL (http://metadata.google.internal/...
)。因此,您的 Angular 应用在您的用户浏览器上无法访问此 API.
好的图案不是这个。您必须在后端(appEngine 或其他地方、Cloud Functions 或 Cloud 运行)公开一个 API 来接受来自您的 Angular9 应用程序的请求(根据您的服务要求,请求可以进行身份验证(例如使用 firebase auth)或不进行身份验证。
然后托管在 Google 云上的后端可以请求元数据服务器,然后生成令牌以访问其他服务。
目前,我们项目的前端有一个 Angular 9 GCP App Engine 实例,后端有一个 Django GCP Cloud 运行 服务。我们希望 Angular 应用程序从元数据服务器向 GCP 查询 JWT 令牌,我们将在 header 中为每个对后端的请求放入该令牌。根据this page查询,我们不断收到以下“混合内容”错误。
Mixed Content: The page at {our App Engine url} was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience={audienceName}'. This request has been blocked; the content must be served over HTTPS.
我们已尝试使用上述 GCP 元数据 url 的 https 版本,它不存在。理论上,我们应该能够检索此元数据,因为 GCP 实例(GCP App Engine 应用程序)正在与 GCP Compute Engine 后端通信。有没有人有过从 UI 进行此查询以获取要在后端请求中设置的令牌的经验?
即使您 Angular9 应用托管在 App Engine 上,代码(TS 代码,翻译成 Javascript)也不会 运行 在 App Engine 上,但它运行s 在客户端浏览器上。
好的,你肯定知道这一点,但这将帮助我更简单地解释你的问题。您尝试调用内部 Google URL (http://metadata.google.internal/...
)。因此,您的 Angular 应用在您的用户浏览器上无法访问此 API.
好的图案不是这个。您必须在后端(appEngine 或其他地方、Cloud Functions 或 Cloud 运行)公开一个 API 来接受来自您的 Angular9 应用程序的请求(根据您的服务要求,请求可以进行身份验证(例如使用 firebase auth)或不进行身份验证。
然后托管在 Google 云上的后端可以请求元数据服务器,然后生成令牌以访问其他服务。