在没有刷新令牌的情况下获取AdWords customerId

时间:2015-07-31 23:46:32

标签: asp.net authentication google-adwords

我正在开发一个允许用户连接AdWords帐户的网络应用程序。 1)因此,一旦用户连接他们的AW帐户,我将从AW API获取包含访问令牌和刷新令牌的令牌。到目前为止,这只是一个典型的OAuth2流程。

2)下次另一个用户连接相同的AW帐户时,AW不会向我提供刷新令牌,假设我已将其存储在某处,这是预期的。

所以这就是问题所在,似乎没有一种方法可以在没有刷新令牌的情况下获取用户信息,这意味着我无法识别用户以检索刷新令牌。

我使用.NET库(Google.Apis.Analytics.v3)并且它不允许我在不提供刷新令牌的情况下请求客户信息...

以下是示例代码:

var tokenResponse = await adWordsService.ExchangeCodeForTokenAsync(code, redirectUri);
var adWordsUser = adWordsService.GetAdWordsUser();
var customerService = (CustomerService)adWordsUser.GetService(AdWordsService.v201502.CustomerService);
var customer = customerService.get();

adWordsService只是API的一个包装器。 因此,当我执行此行var customer = customerService.get()时,我收到以下错误:

  

ArgumentNullException:值不能为null。

     

参数名称:AdWords API需要开发人员令牌。如果您没有,可以参考https://developers.google.com/adwords/api/docs/signingup上的说明获取。

     

Google.Api.Ads.AdWords.Lib.AdWordsSoapClient.InitForCall(String methodName,Object [] parameters)

开发人员令牌就在那里,所有客户端ID都在那里。

如果我在拨打电话前添加此行adWordsUser.Config.AuthToken = tokenResponse.AccessToken;,则会抱怨刷新令牌。

  

ArgumentNullException:值不能为null。

     

参数名称:看起来您的应用程序未配置为正确使用OAuth2。缺少必需的OAuth2参数RefreshToken。您可以运行Common \ Utils \ OAuth2TokenGenerator.cs来生成默认的OAuth2配置。

     

Google.Api.Ads.Common.Lib.OAuth2ProviderBase.ValidateOAuth2Parameter(String propertyName,String propertyValue)

所以问题是,在验证过程中如何获取用户信息(在本例中为customerId),以便存储刷新令牌?

1 个答案:

答案 0 :(得分:1)

所以我发现问题出在adWordsService。创建AdWordsUser时,不会为其分配更新的身份验证提供程序,该提供程序包含最新的身份验证令牌。添加此身份验证提供程序后,AdWordsUser不会尝试刷新令牌,因为令牌尚未过期,因此无需刷新令牌。