generate method
generate a OAuth2 refresh token from JWT credentials
Implementation
@override
Future<Token> generate() async {
final now = DateTime.now();
final jsonWebKey = JsonWebKey.fromPem(jwtCredentials.settings.privateKey);
final keyPair = jsonWebKey.cryptoKeyPair;
final privateKey = keyPair.privateKey!;
final signer = privateKey.createSigner(algorithms.signing.rsa.sha256);
final header = Util.base64GCloudString('{"alg":"RS256","typ":"JWT"}');
final claim = Util.base64GCloudString('''{
"iss": "${jwtCredentials.settings.clientEmail}",
"scope": "${jwtCredentials.scope}",
"aud": "https://www.googleapis.com/oauth2/v4/token",
"exp": ${Util.unixTimeStamp(now.add(Duration(minutes: 60)))},
"iat": ${Util.unixTimeStamp(now)}
}''');
final signature = signer.sign('$header.$claim'.codeUnits);
final jwt = '$header.$claim.${Util.base64GCloudList(signature.data)}';
final OAuthClient oAuthClient = OAuthClient(dio);
return await oAuthClient.getToken({
'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
'assertion': jwt
});
}