使用Cloud Resource Manager API创建Google Cloud Project

时间:2016-09-30 22:09:41

标签: google-app-engine google-api google-oauth google-cloud-platform

我尝试使用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作用域,而我只是假设它是我所缺少的。

2 个答案:

答案 0 :(得分:2)

我不打算告诉你如何使用工作令牌进行测试,而是尝试更广泛地回答你的目标。

在相当高的水平上,你需要:

    您的Cloud Console项目的
  1. Enable the Resource Manager API

  2. 云控制台中的
  3. Create an OAuth client ID for Web applications。您需要注册授权的重定向URI。这是您的应用在最终用户授权您的应用时从Google获取OAuth响应的地方。注意客户端ID,接下来需要它。

  4. 通过汇总您的网址启动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。我假设您的网站上有一个按钮或链接,您可以让用户点击开始此流程。

  5. 为您的OAuth处理程序编码。在Go中执行此操作的一些更深入的代码可以从this Go Sample收集,Go client library最初用于G +登录,但大部分逻辑都是相同的。您将获得一个传递给您的应用程序的code查询参数,该值是一次性授权代码,您的应用程序必须为您代表用户进行API调用的OAuth令牌进行交换。< / p>

  6. 如果适合您的应用和情况,请安全存储您的令牌,以便日后使用或在您的用户未在您的网站上处理时进行处理(可能适合批量处理)。

  7. 现在您已拥有访问令牌,您可以将其传递给Resource Manager API并代表用户创建项目。您可以使用accessing the App Engine Admin API,也可以直接在代码中调用HTTP端点。

  8. 如果您想要使用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身份验证时获取的访问令牌。当您获得应用程序默认凭据时,应由客户端库为您处理。