我使用 Web 界面创建了一个 JDBC 到 BigQuery 的作业,并且运行良好。 现在我想从 GCP 的 REST API 创建相同的作业,因此我从网站获取了请求的其余部分,并尝试从 Postman 发送它。
我正在向以下 URL 发送 POST 请求:
https://dataflow.googleapis.com/v1b3/projects/test-data-308414/templates:launch?gcsPath=gs://dataflow-templates/latest/Jdbc_to_BigQuery
这是我从 GCP 文档中的示例中获得的。
我还在正文中传递了 GCP 给我的 JSON。
API 密钥作为获取参数,格式为“?key=[API_KEY]”
我从服务器收到 401 响应,并显示以下消息:
请求缺少所需的身份验证凭据。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据。 看 https://developers.google.com/identity/sign-in/web/devconsole-project。
状态为:
未经验证
我查看了链接,发现了一个关于如何在前端创建谷歌身份验证的教程 女巫对我没有帮助。
我非常确定我以错误的格式传递了 API 密钥,这也是它无法进行身份验证的原因。
但我找不到任何说明如何正确执行此操作的文档。
PS> 我也尝试过在标题处传递它,正如我在一个地方看到的那样 采用下一种格式
授权:[API_KEY]
但失败并显示相同的消息
几天前,我试图将 GCP 集成到 SaaS 应用程序中,但很难弄清楚如何使用不同项目的凭据来调用微服务(充当 GCP 的代理),这些凭据将动态传递给该微服务。令我惊讶的是,尽管花费了大量时间,我还是无法弄清楚如何实现它,因为 GCP 文档专注于使用应用程序默认凭据一次处理一个项目凭据。另一个令人沮丧的事情是,API 资源管理器默认为所有 API 显示 OAuth 2.0 和 API 密钥,而事实上任何 API 都几乎不支持 API 密钥。最后我找到了这个问题的解决方案here。
以下是调用 GCP Rest api 的步骤 -
client_email
、private_key_id
和 private_key
属性值。GCP_SERVICE_ACCOUNT_CLIENT_EMAIL=<client_email>
GCP_SERVICE_ACCOUNT_PRIVATE_KEY_ID=<private_key_id>
GCP_SERVICE_ACCOUNT_PRIVATE_KEY=<private_key>
import time, jwt, os
iat = time.time()
exp = iat + 3600
client_email = os.getenv('GCP_SERVICE_ACCOUNT_CLIENT_EMAIL')
private_key_id = os.getenv('GCP_SERVICE_ACCOUNT_PRIVATE_KEY_ID')
private_key = os.getenv('GCP_SERVICE_ACCOUNT_PRIVATE_KEY')
payload = {
'iss': client_email,
'sub': client_email,
'aud': 'https://compute.googleapis.com/',
'iat': iat,
'exp': exp
}
private_key1 = private_key.replace('\\n', '\n')
# print(private_key1)
additional_headers = {'kid': private_key_id}
signed_jwt = jwt.encode(
payload,
private_key1,
headers=additional_headers,
algorithm='RS256'
)
print(signed_jwt)
curl -X GET --header 'Authorization: Bearer <jwt_token>' 'https://compute.googleapis.com/compute/v1/projects/{project}/global/networks'
验证请求的最佳实践是使用您的应用程序凭据。只需确保您安装了谷歌云SDK。
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/templates:launch?gcsPath=gs://dataflow-templates/latest/Jdbc_to_BigQuery