Я пытаюсь подключиться к 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());
}