使用分析网址而不是youtube网址时,为什么Google OAuth2身份验证失败?

时间:2012-11-28 11:22:34

标签: ruby-on-rails oauth google-analytics oauth-2.0 google-analytics-api

我正在为我的同事制作一个仪表板,其中显示了Google Analytics旁边的一些统计信息以及其他一些统计信息。要访问Google Analytics数据,请使用OAuth2。 OAuth2要求范围与身份验证请求一起发送以获取访问令牌。我在API控制台中创建了一个可以访问Google Analytics的客户端ID,并在初始化程序中指定了这样的范围:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, ENV['ADMIN_DASHBOARD_GOOGLE_CLIENT_ID'], ENV['ADMIN_DASHBOARD_GOOGLE_CLIENT_SECRET'], { access_type: 'online', approval_prompt: '', scope: 'http://gdata.youtube.com,userinfo.email,userinfo.profile,analytics.readonly' }
end

这使用了omniauth-google-oauth2 gem,以及我在某个例子中找到的范围。但是,对于我的实现,我认为这个范围很奇怪。而不是http://gdata.youtube.com,userinfo.email,userinfo.profile,analytics.readonly我想使用https://www.googleapis.com/auth/analytics.readonly,但更改为该范围会导致请求返回invalid_credentials。需要指定仅访问分析数据的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

范围应该用空格字符分隔,而不是逗号:

https://developers.google.com/accounts/docs/OAuth2WebServer#formingtheurl

如果您需要Youtube和Analytics范围,请使用:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, ENV['ADMIN_DASHBOARD_GOOGLE_CLIENT_ID'], ENV['ADMIN_DASHBOARD_GOOGLE_CLIENT_SECRET'], { access_type: 'online', approval_prompt: '', scope: 'http://gdata.youtube.com,userinfo.email https://www.googleapis.com/auth/analytics.readonly' }
end

如果您只需要Google Analytics,请使用:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, ENV['ADMIN_DASHBOARD_GOOGLE_CLIENT_ID'], ENV['ADMIN_DASHBOARD_GOOGLE_CLIENT_SECRET'], { access_type: 'online', approval_prompt: '', scope: 'https://www.googleapis.com/auth/analytics.readonly' }
end