查询Google Admin Directory API时,使用ruby google-api-client时出现错误请求错误

时间:2013-07-18 05:43:26

标签: google-admin-sdk

我正在使用版本0.6.4的google-api-client ruby​​ gem来查询Google管理目录API。

这是我在ruby控制台中的会话:

require 'rubygems'
require 'google/api_client'

SERVICE_ACCOUNT_CLIENT_ID = "SOME_STRING.apps.googleusercontent.com"
SERVICE_ACCOUNT_EMAIL = "SOME_STRING@developer.gserviceaccount.com"
SERVICE_ACCOUNT_PKCS12_FILE_PATH = "/path/to/privatekey.p12"

key = Google::APIClient::KeyUtils.load_from_pkcs12(SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'notasecret')
asserter = Google::APIClient::JWTAsserter.new(SERVICE_ACCOUNT_EMAIL, "https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly", key)
client = Google::APIClient.new
client.authorization = asserter.authorize
dir_api = client.discovered_api('admin', 'directory_v1')
resp = client.execute(:api_method => dir_api.chromeosdevices.list, :parameters => {'customerId'=>SERVICE_ACCOUNT_CLIENT_ID})

resp.body
=> "{\n \"error\": {\n  \"errors\": [\n   {\n    \"domain\": \"global\",\n    \"reason\": \"badRequest\",\n    \"message\": \"Bad Request\"\n   }\n  ],\n   \"code\": 400,\n  \"message\": \"Bad Request\"\n }\n}\n"

我可能在这里遗漏了一些明显的东西但是从错误响应中不清楚请求中缺少什么。非常感谢任何正确方向的帮助/指示。

感谢。

3 个答案:

答案 0 :(得分:1)

我在C#程序中得到了类似的回复,列出了我域中的用户。

我仍然没有解决它,但到目前为止我设法得到相同的错误消息 API Explorer https://developers.google.com/apis-explorer/#p/admin/directory_v1/ 当尝试在那里做同样的请求并省略域的任何值。

这让我相信我不知何故需要在我的C#代码中将域添加到我的请求中,并通过反复试验我 THINK 我发现如何在C#中执行此操作。

但我的建议是在API资源管理器中尝试你的API请求然后如果你可以通过不提交域的值来获得相同的错误消息,因为我认为这是错误消息的含义。

答案 1 :(得分:0)

我遇到了同样的问题。我写了一个示例gist,解释了如何设置它:

https://gist.github.com/thomaswitt/7468182

步骤是:

  1. 转到Google云端控制台(https://cloud.google.com/console
  2. 使用P12文件创建服务帐户
  3. 在API中启用Admin SDK。
  4. 创建项目
  5. 在此项目中创建已注册的应用
  6. 转到“证书”部分并生成密钥
  7. 同时下载JSON文件
  8. 转到Apps控制台>安全>扩展> 3rdPartgy OAuth (https://admin.google.com/AdminHome?#OGX:ManageOauthClients
  9. 添加API客户端。客户端名称是JSON中client_id的值 文件,API范围为https://www.googleapis.com/auth/admin.directory.user.readonly

答案 2 :(得分:0)

我发现@JoBe's answer步入正轨。在Ruby中,使用Google-Api-Client宝石时,您需要使用list_users将哈希传递给domain。即

UserService.list_users(domain: 'mydomain.com')