我有一个现有的Google Marketplace应用程序,在安装后会进行各种调用以代表用户提取Google数据,并且运行正常。它确实使用Google Admin SDK,现在主要使用Directory API。
我想开始使用Google Calendar Resource API,但我遇到了麻烦。现在,我的应用程序主要使用2脚OAuth1(OAuth2即将推出,希望如此)。我已将范围https://apps-apis.google.com/a/feeds/calendar/resource/添加到我的测试应用程序清单中。但是,任何获取信息的调用(“https://apps-apis.google.com/a/feeds/calendar/resource/2.0/”)都会失败并显示“未知授权标头”。使用相同客户端类的其他调用可以正常工作,包括Directory API。
日历资源API是否不支持通过市场的双腿OAuth1?我通过OAuth2 Playground尝试了相同的范围和URL,它运行正常。我找不到旧的OAuth1游乐场(退役?)
答案 0 :(得分:1)
来自KRH的Revision 2解决方案:
确切的代码很难分享,因为它的互连类等等,但这里基本上是使用Ruby Signet客户端库生成客户端的。
oauth_args = {
:authorization_uri => "https://www.google.com/accounts/OAuthAuthorizeToken",
:token_credential_uri =>"https://www.google.com/accounts/OAuthGetAccessToken",
:client_credential_key => config.google_marketplace_consumer_key
:client_credential_secret => config.google_marketplace_consumer_secret
}
client = Signet::OAuth1::Client.new(oauth_args)
client.two_legged = true
client.requestor_id = owner.email
client.get(:uri => 'https://apps-apis.google.com/a/feeds/calendar/resource/2.0/<test domain>')
结果返回:
Signet::AuthorizationError: Authorization failed. Server message:
<HTML>
<HEAD>
<TITLE>Unknown authorization header</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unknown authorization header</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
请注意,我可以使用完全相同的代码并调用Directory API,然后获得结果。
答案 1 :(得分:0)
您的标头看起来不包含正确的授权。以下是使用 OAuth2 :
对我有用的内容 'Content-Type': 'application/atom+xml',
'Authorization': 'Bearer ' + accessToken,
'X-JavaScript-User-Agent': "Google APIs Explorer"
其中accessToken是一个变量,用于存储具有API权限的管理员的访问令牌,即superadmin