我尝试使用Cloud Resource Manager API在Google Cloud Platform中创建新项目。 当我通过API浏览器使用它时,一切正常,但我不太清楚如何在API Explorer之外将其用作http请求。
我像这样运行请求:
curl -H "Content-Type: application/json" -X POST -d '{"name": "project example","projectId": "my-project-example-1234"}' https://cloudresourcemanager.googleapis.com/v1/projects?fields=response&key={MY_APY_KEY}
响应:
{
"error": {
"code": 401,
"message": "The request does not have valid authentication credentials.",
"status": "UNAUTHENTICATED"
}
}
文档说明了这个请求requires an OAuth scope以及当事情让我感到困惑的时候。 阅读文档时,我无法理解在向其他API发出http请求时,如何通过URL传递其中一个必需的OAuth作用域,而我只是假设它是我所缺少的。
答案 0 :(得分:2)
我不打算告诉你如何使用工作令牌进行测试,而是尝试更广泛地回答你的目标。
在相当高的水平上,你需要:
Create an OAuth client ID for Web applications。您需要注册授权的重定向URI。这是您的应用在最终用户授权您的应用时从Google获取OAuth响应的地方。注意客户端ID,接下来需要它。
通过汇总您的网址启动OAuth流程:
https://accounts.google.com/o/oauth2/v2/auth?
response_type=code&
client_id=<123456789example>.apps.googleusercontent.com&
scope=https://www.googleapis.com/auth/cloudplatformprojects&
redirect_uri=http://<YOUR-APP-URL>/<YOUR-OAUTH-HANDLER>
在该URL中替换客户端ID和重定向URI。我假设您的网站上有一个按钮或链接,您可以让用户点击开始此流程。
为您的OAuth处理程序编码。在Go中执行此操作的一些更深入的代码可以从this Go Sample收集,Go client library最初用于G +登录,但大部分逻辑都是相同的。您将获得一个传递给您的应用程序的code
查询参数,该值是一次性授权代码,您的应用程序必须为您代表用户进行API调用的OAuth令牌进行交换。< / p>
如果适合您的应用和情况,请安全存储您的令牌,以便日后使用或在您的用户未在您的网站上处理时进行处理(可能适合批量处理)。
现在您已拥有访问令牌,您可以将其传递给Resource Manager API并代表用户创建项目。您可以使用accessing the App Engine Admin API,也可以直接在代码中调用HTTP端点。
如果您想要使用curl进行更多测试,我会按照我们编写的{{3}}进程进行操作。替换资源管理器的Admin API URL和名称,您就拥有了整体流程。与上面的内容不同的是,我使用上面的code
流程,因为我假设您需要服务器端并可能刷新令牌,如果您需要能够在用户在您的站点上不活动时进行这些API调用。
答案 1 :(得分:0)
与Alex说的一样,您在OAuth身份验证期间要求范围。轻松验证和获取Oauth访问令牌的一种方法是:
gcloud beta auth application-default login --scopes = https://www.googleapis.com/auth/cloudplatformprojects
正如您所看到的,您可以指定要gcloud的范围,它将为您处理身份验证。
然后,您应该能够创建一个调用项目:
卷曲-H&#34;内容类型:application / json&#34; -H&#34;授权:Bearer $(gcloud beta auth application-default print-access-token)&#34; -X POST -d&#39; {&#34; name&#34;:&#34;项目示例&#34;,&#34; projectId&#34;:&#34; my-project-example-1234&# 34;}&#39; https://cloudresourcemanager.googleapis.com/v1/projects?fields=response
在这里,您传递的是在进行Oauth身份验证时获取的访问令牌。当您获得应用程序默认凭据时,应由客户端库为您处理。