getJwtPayload static method
Implementation
static Future<JwtPayload> getJwtPayload(String idToken) async {
final lIdToken =
idToken.startsWith('Bearer ') ? idToken.substring(7) : idToken;
final b64Header = lIdToken.split('.')[0];
var jsonHeader = decodeB64Json(b64Header);
final map = jsonDecode(jsonHeader);
final keyId = map['kid'];
final ks = await _getKeyStore(keyId);
final jwt = await JsonWebToken.decodeAndVerify(lIdToken, ks);
if (!(jwt.isVerified ?? false)) {
throw InvalidSignatureException();
}
final claims = jwt.claims;
final payload = JwtPayload(
audience: claims.audience?.first ?? '',
expires: claims.expiry ?? DateTime.now(),
issuer: claims.issuer?.toString() ?? '',
name: claims.getTyped('name') ?? '',
notBefore:
claims.notBefore ?? DateTime.now().subtract(Duration(seconds: 1)),
subject: claims.getTyped('sub'),
email: claims.getTyped('email'),
emailVerified: claims.getTyped('email_verified'),
tenantId: claims.getTyped('tenantId') ?? '',
tid: claims.getTyped('tid') ?? '',
permissions: claims.getTypedList<String>('scp') ?? const <String>[],
isAdministrator: claims.getTyped('adm') ?? false,
isVerified: true,
);
return payload;
}