#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
Если вам нужна какая-либо помощь в этом, мы рекомендуем вам обратиться в соответствующую службу поддержки.