0

我正在尝试使用Cloud Resource Manager API在Google云端平台中创建一个新项目。 当我通过API浏览器使用它时,它一切正常,但我不太明白如何将它用作API Explorer之外的http请求。使用云资源管理器API创建Google云项目

我会像这样的请求:

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当事情变得混乱给我,这就是。 阅读文档我无法理解如何将其中一个必需的OAuth范围通过URL传递给剩余的API,因为我只是假设我缺少的东西。

+0

范围在OAuth身份验证期间传递,而不是随后使用凭据:https://cloud.google.com/docs/authentication#oauth_scopes 和https://cloud.google.com/resource-manager/docs/授权。 – Alex

+0

我假设curl请求仅用于测试:您要使用的目标语言是什么?您是否计划代表最终用户创建项目,或者您是否想用自己的帐户创建项目作为所有者? – BrettJ

+0

@BrettJ。你明白了。我使用Go,我会代表我的最终用户创建项目,而不是像我在这里可以找到的所有示例那样的默认帐户。 –

回答

2

与其仅仅告诉你如何使用工作令牌进行测试,我将尝试更广泛地回答你打算做的事情。

在一个相当高的水平,你将需要:

  1. Enable the Resource Manager API您的云端控制台项目。

  2. Create an OAuth client ID for Web applications在云控制台中。您需要注册您的授权重定向URI。当最终用户授权您的应用时,您的应用会从Google获得OAuth回复。请注意客户端ID,接下来您需要。

  3. 通过组装你的URL启动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。我假设你在你的网站上有一个按钮或链接,你可以点击这个按钮来启动这个流程。

  4. 代码您的OAuth处理程序。 Go中的一些更深入的代码可以从this Go Sample中获得,它最初用于G +登录,但大部分逻辑将是相同的。您将获得传递给应用程序的code查询参数,该值是一次性授权代码,您的应用程序必须交换您的OAuth令牌,以代表用户进行API调用。

  5. 如果适合您的应用程序和情况,请安全存储您的令牌以备后用或在您的用户在您的站点上不活动时进行处理(可能适用于批处理)。

  6. 现在您已拥有访问令牌,您可以将其传递给资源管理器API并代表用户创建项目。您可以使用Go client library或者您可以直接在代码中调用HTTP端点。

如果你想用curl进行更多的测试,我会遵循我们编写的过程accessing the App Engine Admin API。替换资源管理器的管理API URL和名称,并获得整体流程。与以上所述不同的是,我使用了上面的code流程,因为如果您需要在用户未在您的站点上激活时进行这些API调用,我认为您需要服务器端和可能的刷新令牌。

0

就像Alex说的那样,您在OAuth身份验证期间询问范围。轻松验证并获得OAuth访问令牌是做一个办法:

gcloud公测身份验证应用程序默认的登录--scopes = https://www.googleapis.com/auth/cloudplatformprojects

正如你所看到的,你可以指定要gcloud的范围和它将为您处理身份验证。

然后,你应该能够创建一个项目调用:

卷曲-H“内容类型:应用程序/ JSON” -H“授权:承载$(gcloud公测身份验证应用程序默认打印访问 - 标记)“-X POST -d'{”name“:”project example“,”projectId“:”my-project-example-1234“}'https://cloudresourcemanager.googleapis.com/v1/projects?fields=response

这里,您传递的是您获取的访问令牌做了Oauth认证。当您获取应用程序默认凭据时,客户端库应该照顾您。

+0

谢谢你,但我不能接受这个答案。如果我必须使用gcloud工具,使用API​​有什么意义?它违背了API本身的全部目的。否则,我可以完全使用gcloud,并且不需要api。我知道你在这里描述的方法,这正是我想要避免的。正如我在问题中所说的那样,它通过使用与您所描述的完全相同的方法的API Explorer工作,不同之处在于,它不是gcloud,而是重定向到Google登录屏幕。 –

+0

那么,您正在使用curl来测试您的请求,并查看它是否从API Explorer之外工作。要使用curl进行测试,您需要有效的访问令牌(请求需要进行验证)。我不会看到手动执行Oauth身份验证的要点。即使谷歌在他们的例子中使用这个过程:https://cloud.google.com/container-builder/docs/curl#send_the_build_request – dyeray

+0

如果你真的想完全使用curl来做所有事情,那么你需要做2个请求。一个是针对Google Oauth 2.0端点进行身份验证并获取有效的访问令牌,另一个是使用获得的令牌调用您的API .Google不鼓励直接使用此API,并且我不确定它如何帮助您理解您对云资源管理器的请求API更多。无论如何,如果您有兴趣,将--log-http传递给gcloud工具是查看Oauth 2.0端点的底层请求的好方法。 – dyeray

相关问题