过去几天我一直在尝试使用Ruby访问Google的Directory API,但却无法让它正常运行。根据{{3}}文档,可以使用2lo授权Directory API:
如果您的应用程序具有某些不寻常的授权要求,例如在请求数据访问(混合)或域范围授权(2LO)的同时登录,则您当前无法使用OAuth 2.0令牌。在这种情况下,您必须使用OAuth 1.0令牌和API密钥。您可以在API API控制台的API访问窗格的“简单API访问”部分中找到应用程序的API密钥。
我目前有工作代码,可以使用2lo访问Provisioning API。从文档中可以看出,通过向请求添加API访问密钥参数并启用一些权限,我可以使用相同的代码访问Directory API。但是,它不起作用,我不知道为什么。
以下是请求代码:
def self.get_user2(email)
@client = Google::APIClient.new(:authorization => :two_legged_oauth_1)
@client.authorization.client_credential_key = GOOGLE_APP_KEY
@client.authorization.client_credential_secret = GOOGLE_APP_SECRET
@directory = @client.discovered_api('admin', 'directory_v1')
result = @client.execute(
@directory.users.get,
'userKey' => email,
:key => GOOGLE_API_KEY
)
JSON.parse(result.body)
end
这让我得到了回应:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
我已将所需范围添加到我的清单文件
<Scope id="usersAPI">
<Url>https://www.googleapis.com/auth/admin.directory.user.readonly</Url>
<Reason>See all users in your company.</Reason>
</Scope>
并在API控制台中启用了我的项目的Admin SDK。
以下是将Faraday.default_connection.response :logger
添加到我的development.rb文件后的日志输出:
get https://www.googleapis.com/admin/directory/v1/users/brian@crushing.mygbiz.com?key=AIzaSyAHYBWlC_qiihRtTKTZleZlAw2ts8Q1WO8
User-Agent: "google-api-ruby-client/0.6.4 Mac OS X/10.8.4"
Authorization: "OAuth oauth_consumer_key=\"76548528623.apps.googleusercontent.com\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"1375899810\", oauth_nonce=\"de4d976eed6883a06b3f6084e3dd0db4\", oauth_version=\"1.0\", oauth_signature=\"3D7aqhBeaCYOYyaF8bWpaM9MA8U%3D\""
Cache-Control: "no-store"
Content-Type: "application/x-www-form-urlencoded"
401
www-authenticate: "AuthSub realm=\"https://www.google.com/accounts/AuthSubRequest\""
content-type: "application/json; charset=UTF-8"
date: "Wed, 07 Aug 2013 18:23:30 GMT"
expires: "Wed, 07 Aug 2013 18:23:30 GMT"
cache-control: "private, max-age=0"
x-content-type-options: "nosniff"
x-frame-options: "SAMEORIGIN"
x-xss-protection: "1; mode=block"
server: "GSE"
connection: "close"
在过去的一天搜索互联网后,我不知道为什么这不起作用。任何想法?