在没有刷新令牌的情况下获取 AdWords customerId
Getting AdWords customerId without a refresh token
我正在开发一个允许用户连接 AdWords 帐户的 Web 应用程序。
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: Value cannot be null.
Parameter name: AdWords API requires a developer token. If you don't have one, you can refer to the instructions at https://developers.google.com/adwords/api/docs/signingup to get one.
Google.Api.Ads.AdWords.Lib.AdWordsSoapClient.InitForCall(String methodName, Object[] parameters)
有开发人员令牌,所有客户端 ID 也有。
如果我在调用之前添加此行 adWordsUser.Config.AuthToken = tokenResponse.AccessToken;
,它会抱怨刷新令牌。
ArgumentNullException: Value cannot be null.
Parameter name: Looks like your application is not configured to use OAuth2 properly. Required OAuth2 parameter RefreshToken is missing. You may run Common\Utils\OAuth2TokenGenerator.cs to generate a default OAuth2 configuration.
Google.Api.Ads.Common.Lib.OAuth2ProviderBase.ValidateOAuth2Parameter(String propertyName, String propertyValue)
所以问题是,为了存储刷新令牌,在身份验证期间如何获取用户信息(在本例中customerId
,根据这篇文章https://developers.google.com/adwords/api/docs/guides/optimizing-oauth2-requests#authenticating_multiple_accounts)?
所以我才发现问题出在adWordsService
。创建 AdWordsUser
时,不会为其分配包含最新身份验证令牌的更新身份验证提供程序。添加此身份验证提供程序后,AdWordsUser
不会尝试刷新令牌,因为令牌尚未过期,因此不需要刷新令牌。
我正在开发一个允许用户连接 AdWords 帐户的 Web 应用程序。 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: Value cannot be null.
Parameter name: AdWords API requires a developer token. If you don't have one, you can refer to the instructions at https://developers.google.com/adwords/api/docs/signingup to get one.
Google.Api.Ads.AdWords.Lib.AdWordsSoapClient.InitForCall(String methodName, Object[] parameters)
有开发人员令牌,所有客户端 ID 也有。
如果我在调用之前添加此行 adWordsUser.Config.AuthToken = tokenResponse.AccessToken;
,它会抱怨刷新令牌。
ArgumentNullException: Value cannot be null.
Parameter name: Looks like your application is not configured to use OAuth2 properly. Required OAuth2 parameter RefreshToken is missing. You may run Common\Utils\OAuth2TokenGenerator.cs to generate a default OAuth2 configuration.
Google.Api.Ads.Common.Lib.OAuth2ProviderBase.ValidateOAuth2Parameter(String propertyName, String propertyValue)
所以问题是,为了存储刷新令牌,在身份验证期间如何获取用户信息(在本例中customerId
,根据这篇文章https://developers.google.com/adwords/api/docs/guides/optimizing-oauth2-requests#authenticating_multiple_accounts)?
所以我才发现问题出在adWordsService
。创建 AdWordsUser
时,不会为其分配包含最新身份验证令牌的更新身份验证提供程序。添加此身份验证提供程序后,AdWordsUser
不会尝试刷新令牌,因为令牌尚未过期,因此不需要刷新令牌。