API Google Ads в функции Azure — как пройти аутентификацию?

#azure-functions #google-ads-api #google-authentication

#azure-функции #google-ads-api #google-аутентификация

Вопрос:

Я пишу функцию Azure на C #, используя .СЕТЕВОЕ ядро.

Я попытался пройти аутентификацию как ПРИЛОЖЕНИЕ на этой странице.

Я попытался пройти аутентификацию с помощью учетной записи службы на этой странице.

В обоих случаях я получаю сообщение об ошибке «отказано в доступе».

Основной вопрос, который у меня есть,

Какой метод аутентификации следует использовать для API Google Ads из функции Azure?

Обновить:

В моей последней попытке использовать учетную запись службы у меня есть этот код

 GoogleAdsConfig config = new GoogleAdsConfig()
            {
           OAuth2Mode = Google.Ads.GoogleAds.Config.OAuth2Flow.SERVICE_ACCOUNT,
           OAuth2SecretsJsonPath = pathtojsonfile,
           OAuth2PrnEmail = "something@somethingelse.iam.gserviceaccount.com",
           OAuth2Scope = "https://www.googleapis.com/auth/adwords",
           DeveloperToken = "********"
        };
        
        var responseMessage = "";
        var client = new GoogleAdsClient(config);
        

        // Get the GoogleAdsService.
        GoogleAdsServiceClient googleAdsService = client.GetService(Services.V6.GoogleAdsService);

        // Create the query.
        string query =
            @"SELECT
             campaign.id,
             campaign.name,
             ad_group.id,
             ad_group.name,
             ad_group_criterion.criterion_id,
             ad_group_criterion.keyword.text,
             ad_group_criterion.keyword.match_type,
             metrics.impressions,
             metrics.clicks,
             metrics.cost_micros
         FROM keyword_view
         WHERE segments.date DURING LAST_7_DAYS
             AND campaign.advertising_channel_type = 'SEARCH'
             AND ad_group.status = 'ENABLED'
             AND ad_group_criterion.status IN ('ENABLED','PAUSED')
         ORDER BY metrics.impressions DESC
         LIMIT 50";

        try
        {
            // Issue a search request.
            await googleAdsService.SearchStreamAsync(customerId.ToString(), query,
                delegate (SearchGoogleAdsStreamResponse resp)
                {
                    // Display the results.
                    foreach (GoogleAdsRow criterionRow in resp.Results)
                    {
                        responseMessage  =
                            "Keyword with text "  
                            $"'{criterionRow.AdGroupCriterion.Keyword.Text}', match type "  
                            $"'{criterionRow.AdGroupCriterion.Keyword.MatchType}' and ID "  
                            $"{criterionRow.AdGroupCriterion.CriterionId} in ad group "  
                            $"'{criterionRow.AdGroup.Name}' with ID "  
                            $"{criterionRow.AdGroup.Id} in campaign "  
                            $"'{criterionRow.Campaign.Name}' with ID "  
                            $"{criterionRow.Campaign.Id} had "  
                            $"{criterionRow.Metrics.Impressions.ToString()} impressions, "  
                            $"{criterionRow.Metrics.Clicks} clicks, and "  
                            $"{criterionRow.Metrics.CostMicros} cost (in micros) during the "  
                            "last 7 days.";
                    }
                }
            );
        }
        catch (GoogleAdsException e)
        {
            responseMessage  = "Failure:n";
            responseMessage  = $"Message: {e.Message}n";
            responseMessage  = $"Failure: {e.Failure}n";
            responseMessage  = $"Request ID: {e.RequestId}n";
            throw;
        }

        return responseMessage;
 

Когда я вызываю это, я получаю следующую ошибку:

 {  
  "StatusCode": 16,  
  "Details": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",  
  "RequestId": "0Yk2OYrUATjwftZ5I0qi2g",  
  "Failure": {  
    "errors": [  
      {  
        "errorCode": {  
          "authenticationError": "NOT_ADS_USER"  
        },  
        "message": "User in the cookie is not a valid Ads user."  
      }  
    ]  
  }  
}  
 

У меня настроена учетная запись службы с включенным API Google Ads. Почему он думает, что я «НЕ ПОЛЬЗОВАТЕЛЬ ADS»???

Ответ №1:

Во-первых, мы должны понимать, что функции не должны использоваться для выполнения действий, связанных с пользовательским интерфейсом. В любой службе приложений всплывающее окно для входа в систему (которое позволяет предоставить учетные данные) не будет поддерживаться.

Например: Чтобы избежать этого сценария, в случае аутентификации AD мы можем использовать принцип обслуживания, когда мы вводим необходимые учетные данные для получения токена. Поэтому, если мы хотим использовать Google auth SDK, нам нужно подключиться к соответствующей команде (команде Google), чтобы понять, возможно ли это вообще.

Для этого вы можете проверить аутентификацию учетной записи службы «Сервер-сервер», как показано ниже:

https://cloud.google.com/docs/authentication/production

Если вам нужна какая-либо помощь в этом, мы рекомендуем вам обратиться в соответствующую службу поддержки.