Проблема аутентификации с использованием токена доступа в Google API - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь пройти проверку подлинности в конечной точке в облаке Google, разработанной некоторыми коллегами по работе, но получаю сообщение об ошибке:

"неверный токен, не удалось проверить токен"

Я генерирую маркер доступа OAuth, используя JSON с учетными данными. Содержимое JSON выглядит следующим образом:

{
  "type": "service_account",
  "project_id": "xxxxxxxxx",
  "private_key_id": "xxxxxxxxxxxxx",
  "private_key": "-----BEGIN PRIVATE KEY-----GiantHashHere---END PRIVATE KEY-----\n",
  "client_email": "xxxxxxxx@xxxxxxxxxxx",
  "client_id": "xxxxxxxxxxxxx",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "xxxxxxxxxxxx"
}

Я генерирую токен доступа с помощью библиотеки API Google для. NET, например:

    FileStream F = new FileStream(@"pathToThe.json", FileMode.Open, FileAccess.Read, FileShare.Read);


    Credential = await GoogleCredential.FromStream(F).CreateScoped("https://www.googleapis.com/auth/cloud-platform")
    .UnderlyingCredential.GetAccessTokenForRequestAsync();

Затем я вызываю API следующим образом:

string baseUrl = Config.Config.getEndPointApiGoogleLeituraImagem();
            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.BaseAddress = new Uri(baseUrl);
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

            var json = JsonConvert.SerializeObject(dados);

            HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");

            HttpResponseMessage response = client.PostAsync(baseUrl, content).Result;

            string result = response.Content.ReadAsStringAsync().Result;

            RetornoApiGoogleLeituraImagem retornoLeitura = JsonConvert.DeserializeObject<RetornoApiGoogleLeituraImagem>(result);

            return retornoLeitura;

Я что-то не так делаю в вызовах?

Кроме того, люди, которые разработали API, сказали мне попробовать использовать токен идентичности вместо токена доступа, но я не могу найти, как его сгенерировать. Кроме того, вся документация, которую я нашел, подсказывает мне использовать токен доступа. Если это правильный ответ на эту проблему, как я могу создать идентификационный токен?

Если вам нужна дополнительная информация, пожалуйста, спросите. Я никогда не делал этого раньше, и я также не привык спрашивать в переполнении стека, поэтому любые советы приветствуются!

...