4

我正在为我的同事制作一个仪表板,其中显示了来自 Google Analytics 的一些统计数据以及其他一些统计数据。为了访问 Analytics 数据,我使用 OAuth2。OAuth2 需要一个范围与身份验证请求一起发送,以便获取访问令牌。我在 API 控制台中创建了一个可以访问 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-oauth2gem,以及我在某处的示例中找到的范围。但是,对于我的实现,我认为这个范围很奇怪。而不是http://gdata.youtube.com,userinfo.email,userinfo.profile,analytics.readonly我想使用https://www.googleapis.com/auth/analytics.readonly,但更改为该范围会导致请求返回invalid_credentials。指定只需要访问分析数据的正确方法是什么?

4

1 回答 1

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

如果您只需要分析,请使用:

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
于 2012-12-10T18:07:39.490 回答