首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用OmniAuth刷新令牌访问Google

使用OmniAuth刷新令牌访问Google
EN

Stack Overflow用户
提问于 2014-12-19 18:44:49
回答 1查看 649关注 0票数 2

我正在开发一个rails应用程序,在该应用程序中,我需要访问用户获取发布数据。我正在使用‘google api’创业板。我已经为用户设置了OmniAuth,以便对他们的DFP帐户进行身份验证,并根据google (https://developers.google.com/doubleclick-publishers/docs/authentication)存储刷新令牌。我不知道如何使用刷新令牌来访问DFP api。

我正试图进行如下所示的连接:

代码语言:javascript
代码运行次数:0
运行
复制
dfp = DfpApi::Api.new({
      :authentication => {
        :method => 'OAuth2',
        :oauth2_client_id => GOOGLE_CLIENT_ID,
        :oauth2_client_secret => GOOGLE_CLIENT_SECRET,
        :user_agent => USER_AGENT,
        :application_name => APP_NAME,
        :oauth2_token => {
          :refresh_token => GOOGLE_DFP_REFRESH_TOKEN
        }
      },
      :service => {
        :environment => 'PRODUCTION'
      }
    })

AnyTime之后,我尝试进行查询,得到以下错误:

代码语言:javascript
代码运行次数:0
运行
复制
DfpApi::V201411::UserService::ApiException: [AuthenticationError.AUTHENTICATION_FAILED @ ]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-22 14:38:37

不使用刷新令牌访问api,请使用access_token。打电话之前,我正在刷新access_token。

刷新您的令牌:

代码语言:javascript
代码运行次数:0
运行
复制
 def refresh_access_token
   refresh_token = self.refresh_token
   google_refresh_url = "https://accounts.google.com/o/oauth2/token"
   response = RestClient.post google_refresh_url, :grant_type => 'refresh_token', :refresh_token => refresh_token, :client_id => ENV['GOOGLE_CLIENT_ID'], :client_secret => ENV['GOOGLE_CLIENT_SECRET']
   response_hashed = JSON.parse(response)
   new_access_token = response_hashed['access_token']
   self.save_new_access_token(new_access_token)
 end

然后,OAuth DFP哈希应该如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
@api = DfpApi::Api.new({
  :authentication => {
    :method => 'OAuth2',
    :oauth2_client_id => ENV['GOOGLE_CLIENT_ID'],
    :oauth2_client_secret => ENV['GOOGLE_CLIENT_SECRET'],
    :application_name => ENV['GOOGLE_APP_NAME'],
    :client_customer_id => google_dfp_credential.google_client_customer_id,
    :network_code => google_dfp_credential.network_code,
    :user_agent => ENV['GOOGLE_DFP_USER_AGENT'],
    :oauth2_token => {
      :access_token => google_dfp_credential.access_token,
     },
   },
   :service => {
     :environment => 'PRODUCTION'
    }
  })

user_agent是应用程序的唯一字符串,每次访问api时都应该是相同的。有关这方面的更多信息,请参见下面的链接:

http://googleadsdeveloper.blogspot.com/2013/11/please-set-user-agent-or-application.html

您还需要通过手动登录到dfp帐户,从您正在访问的dfp帐户获取network_code。据我所知,这不是通过OAuth身份验证返回的。有关如何获取network_code的更多信息,请参见下面链接中的步骤2:

https://developers.google.com/doubleclick-publishers/docs/start

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27572108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档