Google Rest API: «Недействительный JWT: провал проверки аудитории»?Я использую API поля аудитории - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь подключиться к REST API Google (для Google Календарей), используя JWT.Я следовал инструкциям вплоть до здесь .Когда я отправляю запрос на публикацию с моим JWT (с grant_type и assertion в теле для предыдущих сообщений StackOverflow), я получаю сообщение об ошибке:

{
  "error": "invalid_grant",
  "error_description": "Invalid JWT: Failed audience check. The right audience is https://www.googleapis.com/oauth2/v4/token"
}

Мой код короткий, поэтому я опубликуюэто полностью (без частной информации) ниже.Я использую библиотеку jaguar_jwt и смоделировал свое поколение JWT из их примера кода.Я создал служебную учетную запись и, по-моему, следовал всем инструкциям вплоть до вышеупомянутого пункта в документации Google.

import 'package:http/http.dart' as http;
import 'package:jaguar_jwt/jaguar_jwt.dart';

String generateJWT() {
  final String privateKey = "-----BEGIN PRIVATE KEY-----.********=\n-----END PRIVATE KEY-----\n";

  final claimSet = new JwtClaim(
      issuer: 'google-api@**********.iam.gserviceaccount.com',
      audience: <String>['https://www.googleapis.com/oauth2/v4/token'],
      otherClaims: <String,dynamic>{
        "scope":"https://www.googleapis.com/auth/calendar",
        "access_type": "offline"
      },
      maxAge: const Duration(minutes: 60));

  String token = issueJwtHS256(claimSet, privateKey);
  // print(token);

  return token;
}

void sendJWT(String jwt) async {
  var client = new http.Client();
  try {
    String googleUri = "https://www.googleapis.com/oauth2/v4/token";

    var requestBody = {'grant_type':'urn:ietf:params:oauth:grant-type:jwt-bearer',
                        'assertion':'$jwt',
                        "access_type": "offline"
                      };

    await client.post(googleUri, body: requestBody)
          .then((value) => print(value.body));

  } finally {
    client.close();
  }
}

main(List<String> arguments) {
  sendJWT(generateJWT());
}

...